1

IIFE を使用して私が見た 2 つの方法 (他にもあることはわかっています):

(function(){
    console.log(this);
}).call(this);

(function(){
    console.log(this);
})();

最初のものを使用する理由はあります.call(this)か?();関数内で同じコンテキストを生成しませんか?

4

1 に答える 1

4

これは、コードが実行される場所によって異なります。

.call(this)thisを渡したオブジェクトに明示的に設定します.call。を使用する場合にのみ、();に設定さthisれますwindow(またはundefined厳密モードでは to に設定されます)。

コードがグローバル スコープで実行される場合、それは同じになります。thisそうでない場合、が参照していないwindow(または である)場合は、異なる結果が得られますundefined

例:

var obj = {
   foo: function() {
       (function(){
           console.log(this); // this === obj
       }).call(this); // this === obj

       (function(){
           console.log(this); // this === window
       })();
   }
};

obj.foo();

thisMDNに関する詳細情報

于 2013-06-05T10:08:01.640 に答える