var foo = "window";
var obj = {
foo : "obj",
getFoo : function(){
return function(){
return this.foo;
};
}
};
var f = obj.getFoo();
console.log(f()); //结果:window
为什么上述代码的运行结果是window呢?
var foo = "window";
var obj = {
foo : "obj",
getFoo : function(){
return function(){
return this.foo;
};
}
};
var f = obj.getFoo();
console.log(f()); //结果:window
为什么上述代码的运行结果是window呢?
obj.getFoo()
返回一个方程,赋值给了 f 。
f 通过 f()
被调用,没有明确的调用者,所以 this 就是 window
。
想要的到 "obj" ,可以这样做
var foo = "window";
var obj = {
foo : "obj",
getFoo : function(){
var self = this;
return function(){
return self.foo;
};
}
};
var f = obj.getFoo();
console.log(f());
因为,在f()
实际运行的地方,this
是window
,由于没有通过call
或者bind
改变上下文,所以输出的就是window
。
可以按照如下替换方法:
console.log(f());
// ----->
console.log(obj.getFoo());
// ----->
console.log(function() {
var self = this;
return function() {
return self.foo
}
});
这里的self
就是指向window
了,所以return self.foo
就是return window.foo
,也就是'window'
。
其实最简单的理解就是obj.getFoo给了f,然后再看这方法运行的位置在哪.
f = function () {
return function () {
return this.foo
}
}
console.log(f())中f()是独立被调用的
1.如果调用者函数,被某一个对象所拥有,那么该函数在调用时,内部的this指向该对象。
2.如果函数独立调用,那么该函数内部的this,则指向undefined。
推荐阅读 http://www.jianshu.com/p/d647... 希望对你有所帮助
在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果调用者函数,被某一个对象所拥有,那么该函数在调用时,内部的this指向该对象。如果函数独立调用,那么该函数内部的this,则指向undefined。但是在非严格模式中,当this指向undefined时,它会被自动指向全局对象。链接描述
这里f()所引用的函数是在独立调用,所以在非严格模式下this指向全局对象。
因为 obj.getFoo() 返回一个匿名函数;
实际上
var f = obj.getFoo(); //实际上就是执行下面这段代码
var f = ()=>this.foo; //this指向全局
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
函数执行,函数体内的this指向函数的调用方
1、下面这段代码,getFoo函数的调用方是obj,所以getFoo函数内部的this指向obj对象
2、getFoo函数返回了一个匿名函数赋给变量f,再执行函数f,此时变量f是挂载到window上的,函数f的调用方是window,函数f内部的this也指向window