嗨我有以下JavaScript代码,我试图运行。我的目标是在不同的范围和不同类型的JavaScript调用中掌握this
的含义。与JavaScript中的“this”对象混淆匿名函数
如果你看下面的代码:我有一个内部匿名函数,它被分配到innerStuff
变量。在这样的匿名函数中,this
指向window
对象,而不是外部函数对象或其他任何东西。尽管它仍然可以访问out函数的变量。
无论如何,我不确定,为什么会这样;但如果你看下面的代码,我通过this
的形式that
到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();
此打印未定义内部匿名函数。是否因为参数that
和外部函数中定义的that
之间有冲突? 我以为参数会覆盖可见性。为什么价值不被保留?
这是非常令人困惑的。
另一方面,如果我没有通过that
,而只是使用它,因为知名度是存在的,结果是正确的和预期的。
我错过了什么?这是变量之间的冲突,存在于相同的范围内吗? 有没有很好的理由,那内部函数有this
绑定到window
对象?
啊!!我不能相信我错过了这一点。万分感谢。 – Priyank 2009-12-30 18:09:18
那么,它*与完全不同于在其他语言中绑定方法是如何工作的... – bobince 2009-12-30 18:28:46