学习Javascript闭包(Closure)
2016-11-28 17:11
531 查看
看了阮一峰老师关于闭包的博客 ,针对最后的思考题再次记录一下
如果你能理解下面两段代码的运行结果,应该就算理解闭包的运行机制了。
代码片段一。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
代码片段二。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
第一个问题,object.getnameFunc()()函数在执行时this属于全局域,因此结果是the window
第二个问题,通过使用that=this 保留了在调用object.getnameFunc()时的this状态值。因此在getnameFunc()的闭包中访问的变量是已经不是this的了,而是that的~
对于代码片段一
object.getnameFunc() 返回的匿名闭包函数被全局变量所引用,其中的this指向
全局变量,当执行时打印The Window 。
对于代码片段二
object.getnameFunc() 在返回闭包函数前,将this赋给that,此时getnameFunc是由
object调用的,故而this指向object,当内部函数被返回时,由于闭包的特性,仍然
能访问到外部函数中的值,当执行打印My Object 。
如果你能理解下面两段代码的运行结果,应该就算理解闭包的运行机制了。
代码片段一。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
代码片段二。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()());
第一个问题,object.getnameFunc()()函数在执行时this属于全局域,因此结果是the window
第二个问题,通过使用that=this 保留了在调用object.getnameFunc()时的this状态值。因此在getnameFunc()的闭包中访问的变量是已经不是this的了,而是that的~
对于代码片段一
object.getnameFunc() 返回的匿名闭包函数被全局变量所引用,其中的this指向
全局变量,当执行时打印The Window 。
对于代码片段二
object.getnameFunc() 在返回闭包函数前,将this赋给that,此时getnameFunc是由
object调用的,故而this指向object,当内部函数被返回时,由于闭包的特性,仍然
能访问到外部函数中的值,当执行打印My Object 。
相关文章推荐
- 学习Javascript闭包(Closure)
- JavaScript学习总结二:js闭包(Closure)概念
- 学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)
- JavaScript 学习note (闭包 Closure)
- 学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)[非常棒的文章]
- 学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)
- 汇总学习Javascript闭包(closure)
- 新手初学习javascript的闭包(closure)概念
- JavaScript学习总结二:js闭包(Closure)概念
- 学习Javascript闭包(Closure)
- 简单学习Javascript闭包(Closure)
- 学习Javascript闭包(Closure)
- Javascript学习---3、闭包(closure)