我遇到了一个与this
上下文有关的小问题:
在JavaScript中,this
总是指向我们正在执行的函数的“所有者”,或者更确切地说,指向一个函数是其方法的对象。
因此,这段代码:
var o={
f:function ()
{
console.log(this); //the owner of the function is `o`
}
}
console.log(o.f()) // this shows the `o` as this
一切正常。
那么,这段代码是为什么而存在的呢?
var o = {
f: function ()
{
return function ()
{
console.log(this);
}
}
}
console.log(o.f()())
显示this
是全局对象/窗口?
o.f()
返回一个函数,然后我执行它。但仍然将Hoster对象显示为o
,那么为什么它显示Hoster为window
?
window
对象。你可以将this
绑定到返回的函数上,这样this
的值将始终指向o
。你最后一行的技术含义是:console.log((function () { console.log(this); }).bind(this)());
- Ianthis
如何工作的更详细解释,请参见:https://dev59.com/c2Yr5IYBdhLWcg3wuciw#13441628 - slebetman