《 javascript 高级程序设计》讲闭包的一章中,有这么一个例子
var name = "The Window";
var object = {
name: "My Object",
getName: function() {
return function() {
console.log(this.name)
}
}
}
object.getName()(); // "The Window"
我很好奇,然后我又加上了另外一个函数,测试一下
function object2() {
this.name = "My";
return function() {
console.log(this.name);
}
}
object2()(); // "My"
第二个函数正常输出了 My,为什么??书上说是“内部函数搜 this 跟 arguments 是不会访问到外部变量的”,可是第二个例子又作何解释??然后我又把 this.name 赋值去掉:
function object2() {
return function() {
console.log(this.name);
}
}
object2()(); // "The Window"
这个时候跟第一个例子相同了,也就是外部函数的 this.name 没这个值得时候,内部函数的 this 会指向 window。于是我又把第一例子改了一下:
var name = "The Window";
var object = {
name: "My Object",
getName: function() {
console.log(this.name);
//console.log(this);
return function() {
console.log(this.name);
}
}
}
object.getName()(); // "My Object","The Window"
然后我尝试输出了 getName() 里面的 this。发现指向的是 object。。。而其余两个 this 输出都是 Window 的一长串东西。我感觉被 this 跟闭包搞晕了。。。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.