2016-03-20 4 views
2

次のtest.jsファイルには2行の出力があり、各行はグローバルオブジェクトとthisの厳密な等価性をテストします。ノードのグローバルコンテキスト===「this」は時々、サンプル内でのみですか?

var c = require("console"); 

console.log(this === global); 

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

私はnode.exe test.jsを使用してコマンドラインからこのファイルを実行すると、私は次のような出力を得る:

を偽

しかし、私は内側からtest.jsをロードするときノードREPLそれは私に別の出力を提供します:


これは、同じスクリプトのこれらの二つの実行シナリオの出力の差の原因は何ですか?REPL

PS C:\Programming> node 
> .load test.js 
.load test.js 
> var c = require("console"); 
undefined 
> console.log(this === global); 
true 
undefined 
> 
> (function() { 
...  console.log(this === global); 
... })(); 
true 
undefined 
> 
> .exit 

でスクリプトを読み込むの完全な転写産物でありますか

いずれの場合でも厳密モードは有効ではありません(ノードコマンドラインでは、デフォルトでfalseに設定されています)。コードは'use strict';で厳密モードを起動しません。

私はWindows 10 x64上でノード5.9.0を使用しています。

答えて

2

2つの環境が異なるためです。コマンドラインでファイルを実行するか、ファイルをrequire()で実行すると、特別な環境で実行されるノードモジュールとしてロードされます(の代わりにexports/module.exports)。

REPLの性質/目的のためにノードモジュールのようにREPLを処理する意味がないため、REPL内のコードはすべて同じスコープ内で単純に実行されます。

関連する問題