Javascript 显示模块模式:func.apply(null,arr)与func.apply(this,arr),其中func位于匿名函数中

Javascript 显示模块模式:func.apply(null,arr)与func.apply(this,arr),其中func位于匿名函数中,javascript,Javascript,请您解释一下在下面的代码示例中使用func.applynull,arr和func.applythis,arr的区别好吗 var Foo = function() { function useMe(a, b, c) { document.body.innerHTML = '<p>a: ' + a + '<br>b: ' + b + '<br>c: ' + c + '</p>' }

请您解释一下在下面的代码示例中使用func.applynull,arr和func.applythis,arr的区别好吗

var Foo = function() {
    function useMe(a, b, c)
    {
        document.body.innerHTML =
            '<p>a: ' + a + '<br>b: ' + b + '<br>c: ' + c + '</p>'
    }

    function go()
    {
        var arr = ['foo', 'bar', 'baz']
        useMe.apply(null, arr)
    }

    return {
        go: go,
        useMe: useMe
    }
}()

Foo.go()
资料来源:

JSFiddle:


我知道,当null用作apply函数的第一个参数时,全局对象,即window用作useMe的this参数。对于上述代码这样简单的用法,我们将什么作为apply函数的第一个参数传递真的很重要吗?

所有函数都有一个所谓的上下文。此上下文是一个对象,存在于This变量中

向Hello World发出警报的示例:

function hello() {
  alert(this.greeting);
}

hello.apply({greeting: "Hello World"});
您的函数不访问它,因此在您的上下文中指定null或this并不重要


在ES 5严格模式下,窗口不再是函数的标准上下文,而是包含未定义的值。

所有函数都有所谓的上下文。此上下文是一个对象,存在于This变量中

向Hello World发出警报的示例:

function hello() {
  alert(this.greeting);
}

hello.apply({greeting: "Hello World"});
您的函数不访问它,因此在您的上下文中指定null或this并不重要


在ES 5严格模式下,窗口不再是函数的标准上下文,而是包含未定义的值。

应用的第一个参数是在函数调用中使用的值。因为useMe不使用这个,所以你提供什么都不重要。如果提供null或undefined,则告诉apply在松散模式下使用全局对象,或在严格模式下使用undefined对象。

要应用的第一个参数是在函数调用中使用的值。因为useMe不使用这个,所以你提供什么都不重要。如果提供null或undefined,则告诉apply在松散模式下使用全局对象,或在严格模式下使用undefined对象。

useMe正在使用此选项吗?不,这在代码中重要吗?不。正如user2736012所说,设置执行上下文只要您在函数中使用它,它就是有用的。@GameAlchemist:这不是一个问题。这两件事完全不相关。不,不是“完全不相关”:“这”是执行上下文的一部分。然而我的说法是错误的。我在用这个吗?不,这在代码中重要吗?不。正如user2736012所说,设置执行上下文只要您在函数中使用它,它就是有用的。@GameAlchemist:这不是一个问题。这两件事完全不相关。不,不是“完全不相关”:“这”是执行上下文的一部分。但我的说法是错误的。