var foo = "window";
var obj = {
foo : "obj",
getFoo : function(){
return function(){
return this.foo;
};
}
};
var f = obj.getFoo();
console.log(f()); //结果:window
为什么上述代码的运行结果是window呢?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
obj.getFoo()返回一个方程,赋值给了 f 。f 通过
f()被调用,没有明确的调用者,所以 this 就是window。想要的到 "obj" ,可以这样做
因为,在
f()实际运行的地方,this是window,由于没有通过call或者bind改变上下文,所以输出的就是window。可以按照如下替换方法:
这里的
self就是指向window了,所以return self.foo就是return window.foo,也就是'window'。其实最简单的理解就是obj.getFoo给了f,然后再看这方法运行的位置在哪.
函数执行,函数体内的this指向函数的调用方
1、下面这段代码,getFoo函数的调用方是obj,所以getFoo函数内部的this指向obj对象
2、getFoo函数返回了一个匿名函数赋给变量f,再执行函数f,此时变量f是挂载到window上的,函数f的调用方是window,函数f内部的this也指向window