2017-04-06 1 views
0

結果は2、2を出力すると予想される以下のコードがあります。ブラウザとnodeJSで以下のコードランニングに違いがあるのはなぜですか?

nodeJSコンソールで実行すると、定義されていません。 私はそれをChromeで実行すると、期待値が得られます。

私の質問ですが、この違いはどういう違いがありますか?

var a = 2; 
function foo(){ 
    console.log(this.a); 
} 

(function(){ 
    foo(); 
}()) 

function doFoo(fn){ 
    fn(); 
} 

var obj ={ 
    a:3, 
    foo:foo 
}; 

doFoo(obj.foo); 

答えて

2

Node.jsはグローバルスコープでコードを実行しません。代わりに、各ファイルはIIFEでラップされ、各ファイルは独自のスコープを取得します。したがって、ブラウザではvar a = 2がグローバル変数であるのに対し、node.jsではvar a = 2はグローバル変数ではありません。

コードでは、グローバル変数aがブラウザに表示されます(2)。 node.jsにはaが定義されていないため、定義されていません。

ローカル変数ではなくグローバル変数を宣言するには、同じ変更をvar a = 2からa = 2に変更するには

+0

ブラウザ内のグローバル変数は、「ウィンドウ」のプロパティです。したがって、var a = 2を宣言すると、基本的にこれはwindow.a = 2を作成します。 – Pratyush

+0

@WangShuhao:javascript: 'var a'でローカル変数を宣言する方法。どのようにjavascriptでブロック変数を宣言する 'let 'を。 javascriptでグローバル変数を宣言する方法: 'a'。 javascriptでは、 'var'または' let'キーワードを使用せずに変数に代入すると、グローバル変数が作成されます。 – slebetman

+0

ありがとう!私は答えとしてマークします。 –

関連する問題