2015-09-24 16 views
5

内側:`this`グローバルコンテキストおよび機能

  • グローバルコンテキストで、関数が直接呼び出される場合thisは、関数のコンテキスト内のグローバルオブジェクト
  • を指し、それは再びグローバルオブジェクト

を指ししかし、以下:

var globalThis = this; 
function a() { 
    console.log(typeof this); 
    console.log(typeof globalThis); 
    console.log('is this the global object? '+(globalThis===this)); 
} 

a(); 
ファイル foo.jsに配置された210

は...生成します。私たちはモジュールで書くものは何でもコード

のNode.jsで
$ nodejs foo.js 
object 
object 
is this the global object? false 
+0

てみは 'はconsole.log(this)を追加するように、実際のグローバルオブジェクトを参照するために、global objectを使用することができます。 console.log(globalThis); '実際に何が表示されているか – mplungjan

答えて

5

は、関数内でラップされます。この詳細についてはdetailed answerをご覧ください。したがって、モジュールの最上位にあるthisは、グローバルオブジェクトではなく、その関数のコンテキストを参照します。

あなたが実際にこの

function a() { 
    console.log('is this the global object? ' + (global === this)); 
} 

a(); 
+0

モジュール内で' a'が呼び出されたとすると、関数の内部と外部で同じであるべきではないでしょうか? –

+0

@JamesThorpe 'a'はコンテキストオブジェクトなしで呼び出されます(' this')。したがって、デフォルトでは 'this'はグローバルオブジェクトのみを参照します。 – thefourtheye

関連する問題