2016-07-23 1 views
2

タイトル - これはコードの例です:ES6 IIFEとES5 IIFEの実行コンテキストが異なるのはなぜですか?質問まで合計およそ

!function() { 
    console.log(this); // global object 
}(); 

(function() { 
    console.log(this); // global object 
})(); 

() => { 
    console.log(this); // {} 
}(); 

var x = (function() { 
    console.log(this); // global object 
})(); 

矢印関数にシーンWRTの後ろに何が起こっていますか?私はES5でそのスコープを望んでいた場合は、これまでのところ、私が知っているように、私はそうのような空のオブジェクトに実行をバインドする必要があります:

!function() { 
    console.log(this); // global object 
}.bind({})(); 
+1

あなたは、ノードまたは別のCommonJSシステムでこれを実行していますか? –

+0

使用した矢印関数の字句範囲は何ですか? –

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Lexical_this –

答えて

5

それはES5またはES6を行うには何もない、矢印の機能は常に囲んを取得します関数のコンテキスト。 'use strict';を使用しない関数呼び出しは、グローバルオブジェクトをコンテキスト(ブラウザなどのウィンドウ)として常に取得します。デフォルトではコンテキストはundefinedです。

これは、トピックを説明する非常に良い記事です:

https://rainsoft.io/gentle-explanation-of-this-in-javascript/

関連する問題