【发布时间】:2009-12-30 17:55:39
【问题描述】:
您好,我正在尝试运行以下 JavaScript 代码。我的目标是掌握this在JavaScript中不同作用域和不同调用类型的含义。
如果您查看下面的代码:我有一个内部匿名函数,它被分配给innerStuff 变量。在该匿名函数中,this 指向 window 对象,而不是外部函数对象或其他任何东西。事件虽然它仍然可以访问 out 函数的变量。
无论如何,我不确定为什么会这样;但是如果你看下面的代码,我稍后会以that 的形式将this 传递给innerStuff,它工作得很好,并在控制台中打印带有doofus 属性的对象。
var someStuff = {
doofus:"whatever",
newF: function()
{
var that = this;
console.log(that);
var innerStuff = function(topThis){
console.log(topThis);
};
return innerStuff(that);
}
}
someStuff.newF();
现在我只更改一点代码。而不是将它分配给innerStuff,我将直接通过调用它来返回函数,如下所示:
var someStuff = {
doofus:"whatever",
newF: function()
{
var that = this;
console.log(that);
return function(that){
console.log(that);
}();
}
}
someStuff.newF();
这将为内部匿名函数打印 undefined。是因为作为参数传递的that 与在外部函数中定义的that 之间存在冲突吗?
我认为该参数会覆盖可见性。为什么不保留价值?
这完全令人困惑。
另一方面,如果我没有通过that,而是直接使用它,因为可见性在那里,结果是正确的并且符合预期。
我错过了什么?它是否存在于同一范围内的变量之间的冲突?
是否有充分的理由,内部函数将 this 绑定到 window 对象?
【问题讨论】:
标签: javascript scope this