NodeJavaScript学习笔记Node.js专题

那些年成为node攻城狮的路(七)

2016-09-18  本文已影响67人  我就是L

函数

function fn(){...}//函数声明,具有提升作用,执行代码之前就会先读取。
var fn = function(){...}//函数表达式

*函数中的几个属性

(function(){
console.log(arguments);{ '0': 'a', '1': 'b', '2': 'c', '3': 'd' }
})('a','b','c','d');
(function(){
console.log(arguments.length);//4
})('a','b','c','d');
(function(){
console.log('arguments.callee',arguments.callee);
})('a','b','c','d');
/*运行结果,指向函数自身
function (){
console.log('arguments.callee',arguments.callee);
}*/
function inner(){
console.log('caller',inner.caller);
}
function outter(){
    inner();
}
/*
函数调用者的父环境outter()
*/
(function(){
    //code....这里面都是块级作用域
})()

1、函数内部嵌套函数
2、保留函数执行环境的所有活动对象,常驻内存,不会被回收

//局部变量实现累加
function add(){
    var i=0;
    return function(){
        return ++i;
    }
}
var add=add();
console.log(add());//1
console.log(add());//2
console.log(add());//3
console.log(add());//4
name='globa'
var o={
    name:'my object',
    getName:function(){
        var that=this;//保存了指向o这个对象的信息,并未被回收
        return function(){
            console.log(that.name);
        }
    }
}
o.getName()();//my object
name='globa'
var o={
    name:'my object',
    getName:function(){
        return function(){
            console.log(this.name);//最终this成为了普通的函数调用,故指向全局
        }
    }
}
o.getName()();//globa
function createFns(){
    var fns=[];
    for(var i=0;i<5;i++){
        fns.push(function(){
            console.log(i);
        });
    }
    return fns;
}
createFns().forEach(function(fn){
    fn();
})//5 5 5 5 5
function createFns(){
    var fns=[];
    for(var i=0;i<5;i++){
        fns.push((function(i){
            return function(){
                console.log(i);
            }
        })(i))
    }
    return fns;
}

createFns().forEach(function(fn){
    fn();
})//0 1 2 3 4 
上一篇 下一篇

猜你喜欢

热点阅读