我希望函数的上下文(this
)与其父/范围相同。不应该这样吗?
检查下面的示例,我希望_context
获取 Object {foo: "bar"}
的值,但我得到window
个对象。
我的逻辑在哪里欺骗我?
var context = {
foo: 'bar'
};
var _context;
var fn = (function () {
console.log(this); // Object {foo: "bar"}
function foo() {
_context = this;
}
foo();
}.bind(context))();
console.log(_context); // window?! why?
jsFiddle:http://jsfiddle.net/1nz4dda3/
答案 0 :(得分:1)
您通过调用window
在foo()
上下文中明确地调用该函数。在JS this
中引用了调用上下文,并且在内部编写任何函数的位置并不重要。
这是一篇关于JS方法上下文的好文章。
答案 1 :(得分:1)
功能此是根据其调用方式或 bind 设置的。 ECMAScript 2015箭头函数从周围的执行上下文中获取 this 。
此值不是"" context",它只是函数执行上下文的一个参数。
当你这样做时:
var fn = (function () {
...
}.bind(context))();
您将对象 context 绑定到IIFE的此。但是,当您致电:
foo();
您尚未设置其此参数,因此默认为全局对象(浏览器中的窗口)。在严格模式下,它将是未定义的。您从哪里调用 foo 并不重要,它是如何调用它来设置这个。