2

私はjsで匿名の自己実行関数を使用していました:

((function(){
  //do something
})();

しかし、私はこれをどこかで見つけました:

((function(){
  //do something
}).call(this);

違いはなんですか?

4

3 に答える 3

1

を渡すthisと、両方の形式が同等になります。

ただし、違いを確認するには、以下のプログラムを確認してください

var x = 5;
var o = { x: 10 };

function f()
{
    alert(this.x);
}

f();
f.call(o);

f() -> アラート 5.

f.call(o) -> 10 をアラートします。

于 2012-09-14T11:23:45.643 に答える
0

最初の例では、ES5モードでない限りthis、はグローバルオブジェクト(windowブラウザランド)になりますundefined

2番目の例では、呼び出し元のコンテキスト(ES5の場合)またはオブジェクトインスタンスのいずれかthisに依存します。this globalundefined

function Foo() {
    var that = this;

    (function () {
       console.log(this === window);
       console.log(this === that);
       console.log(typeof this === "undefined"); 
    }());

    (function () {
       console.log(this === window);
       console.log(this === that);
       console.log(typeof this === "undefined"); 
    }).call(this);

    (function () {
       "use strict";

       console.log(this === window);
       console.log(this === that); 
       console.log(typeof this === "undefined"); 
    }());
}

new Foo();​

[フィドル]

また、コンテキスト.call()を設定するためにエンジンが余分な作業を行う必要があるため、呼び出しが微視的に遅くなることもわかります。this

于 2012-09-14T11:20:21.970 に答える
0

window1つは(ブラウザの)デフォルトオブジェクトのコンテキストでそれを呼び出し、もう1つは何でものコンテキストでそれを呼び出しますthis。他の関数またはwithブロック内にいない限りthis、デフォルトのオブジェクトになるため、その特定の例に違いはありません。

コンテキストは、関数内で割り当てられる値を決定しthisます。

于 2012-09-14T11:20:28.893 に答える