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中;

posted on 2013-03-05 01:18  paly76  阅读(204)  评论(0)    收藏  举报

导航