js的作用域、作用域链、闭包
1.作用域:变量于函数的可访问范围;变量常见有全局作用域和局部作用域二种。

2.作用域链:javascript在执行时渲染的顺序

3.闭包::能够读取其他函数内部变量的函数

再看看下面解释:

最后一例子:

这个例子返回的是the window,而不是my object;// 这里就是关系到作用域链的搜索的问题。
this始终表示调用者的应用,第一个的闭包返回出来的一个函数,就
是在window的环境下调用了这个函数,所以这个this是指向
window对象的name,故为the window.
拆分:var tmp = Object.getNameFunc(); //此时没有执行this.name
var name = tmp();//这个时候才执行,这时候的this上下文为全局
alert(name);//the window;
把getNameFunc方法改一下
getNameFunc:function(){
var that=this;
return function(){return that.name;};
}
var tmp = Object.getNameFunc();//这个时候执行了that = this,这里的this上下文是object,所以that指的是object[调用getnamefunc(),由作用域链顺序知道,var that=this 被执行访问了,而上一例子的this.name没有被执行,故上下文为全局。] 这里的this就在object环境中执行啦,故my object了。
var name = Object.getNameFunc(); //这个时候执行了that.name
alert(name);//my object;
这个改动的把this保存在了that中;
浙公网安备 33010602011771号