最近学习闭包时,对下面这段代码最后弹出 The Window 不是很明白,哪位高手详细指引下呗?
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(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()());
解决方案 »
- 如何解决这样的问题
- 有没有C#Script?
- 想问下js的document.write对浏览器版本的支持问题
- web打印自动分页如何设置每页表格的最后一行也完整显示而不是显示在第二页
- ======window.open()后关闭父窗口,opener.close()有时不起作用的原因是什么????
- 关于javascript setInterval 计时器的一个非常奇怪的问题
- 用Javascript如何写Grid控件
- 【求书籍推荐】:有没有讲解浏览器的书籍?
- 关于参数传递的问题
- jsp中我用include file方法载入不了文件
- jquery类型转换。在线等。急
- javascript能读写本地文件么?
object.getNameFunc()()的执行就是执行匿名函数,也就是(function(){return this.name;})()。
结合this永远指向调用者,如果没有调用者则指向window的经典台词。故该this指向window。
window.name显然就是"The Window"。
这个例题迷惑人之处在于最后的那对括号():
alert(object.getNameFunc()() 。
你可以把那对括号去掉,再测试一下。结果应该是没执行的匿名函数的结构体本身:
return function(){
return this.name;
};