1、
function f1(){
var n=999;
nAdd=function(){n+=1;console.log(n)}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); //999
nAdd();//1000(这里函数作用域中的n时来自发f1函数下的变量n)
result(); //1000
2、
var name = 'global';
var obj = {
name : 'obj',
dose : function(){
this.name = 'dose';
return function(){
return this.name;
}
}
}
//这里的this是window,也就是让当前函数指向window
obj.dose().call(this)
//obj.dose()调用相当于return后面的返回值,即function(){return this.name;}
//obj.dose().call(this)相当于执行一个匿名函数,并且把当前this作用域window传给那个函数,并调用函数执行
alert(obj.dose().call(this))//global(因为this改变了函数体指向,让其作用域是window
3、
function createFunctions(){
var result = new Array();
for (var i=0; i < 10; i++){
result[i] = function(){
return i;
};
}
return result;
}
4、
var result = new Array(), i;
result[0] = function(){ return i; }; //没执行函数,函数内部不变,不能将函数内的i替换!
result[1] = function(){ return i; }; //没执行函数,函数内部不变,不能将函数内的i替换!
...
result[9] = function(){ return i; }; //没执行函数,函数内部不变,不能将函数内的i替换!
i = 10;
funcs = result;
result = null;
console.log(i); // funcs[0]()就是执行 return i 语句,就是返回10
console.log(i); // funcs[1]()就是执行 return i 语句,就是返回10
...
console.log(i); // funcs[9]()就是执行 return i 语句,就是返回10