var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; console.log(object.getNameFunc()); //输出 this Window
闭包,内部函数不能访问外部函数的this与argum,如果想要访问到,需要在外部函数保存this,使内部函数可以调用到。
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ let that = this return function(){ return that.name; }; } }; console.log(object.getNameFunc()); //输出 My ObjectMy
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; console.log(object.getNameFunc());
楼主你漏了一个括号,应该是object.getNameFunc()().可以等同于一个函数表达式,即
var fun = object.getNameFunc();这里返回一个函数声明:
function(){
return this.name;
}
fun();最后再调用fun();返回this.name
当函数并非作为一个对象的属性而是被调用时,this被绑定到全局变量,即指向window。所以这里返回的this.name 不是对象中的name,而是window中的全局变量name,即The window。
<script type="text/javascript">
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return this.name;
}
};
document.write(object.getNameFunc());
不是很懂?