1

以下のコード サンプルのfunc.apply(null, arr)との使用の違いを教えてください。func.apply(this, 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()

ソース: http://jsfiddle.net/YQsaJ/

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(this, arr) // USING this INSTEAD OF null
    }

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

Foo.go()

JSFiddle: http://jsfiddle.net/3DvtA/

null関数の最初の引数としてwhen が使用されていることを理解していapplyます。つまり、グローバル オブジェクトはの引数windowとして使用されます。上記のコードのように単純な使い方の場合、関数の最初の引数として何を渡すかは本当に重要でしょうか?thisuseMeapply

4

2 に答える 2

2

すべての関数には、いわゆるコンテキストがあります。このコンテキストはオブジェクトであり、this変数に存在します。

「Hello World」を警告する例:

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

hello.apply({greeting: "Hello World"});

関数は にアクセスしないため、 nullを指定するかthisthisを指定するかはコンテキストでは問題になりません。

ES 5 の厳密モード以降、windowは関数の標準コンテキストではなくなり、代わりに値が含まれていますundefined

于 2013-09-22T16:02:17.297 に答える
2

の最初の引数は、関数呼び出し内でapply使用する値です。を使用しないためthis、何を指定しても問題ありません。グローバル オブジェクトを使用するように提供または指示する (ルース モード) または(厳密モード)。useMethisnullundefinedapplyundefined

于 2013-09-22T16:02:45.563 に答える