我有一个小的代码段
var foo = {
bar: function () {
return this.baz;
},
baz: 1
};
(function () {
return typeof arguments[0]();
})(foo.bar);
baz = 1;
//result undefined
执行foo.bar
函数时,this
是指窗口范围,当然对baz
一无所知,因此我在窗口中定义了baz=1
。但是该程序仍然无法正常工作,并返回undefined
。为什么在窗口中定义了baz
时它返回undefined
,而我正在从窗口执行foo.bar
执行函数(例如 arguments[0]()
)时, this
是指没有属性 baz
的 arguments
对象,因此它仍然是 undefined
。
您可以通过:
将this
绑定到某个对象 arguments[0].call(foo)
或arguments[0].apply(foo)
。
"此"成为bar函数。如果将其更改为返回foo.baz,它将工作
foo.baz
将起作用,但不能使用this.baz
。尝试阅读JavaScript中的范围