变量定义但在此表示窗口时在JavaScript中不起作用



我有一个小的代码段

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是指没有属性 bazarguments对象,因此它仍然是 undefined

您可以通过:

this绑定到某个对象

arguments[0].call(foo)arguments[0].apply(foo)

"此"成为bar函数。如果将其更改为返回foo.baz,它将工作

foo.baz将起作用,但不能使用this.baz。尝试阅读JavaScript中的范围

最新更新