2016-04-04 5 views
3

画像を投稿するには十分な評判がありません。 Hereはそれをすべて示すスクリーンショットです。v8のnode.jsとchromeの相違点

Chromeバージョン49.0.2623.110メートル

ノードv5.10.0

var a = 0; 

(function() { 
    this.a = 1; 
    this.b = 2; 
    console.log(a); 
})(); 

console.log(a); 
console.log(b); 

クロムは

1 
1 
2 

を与えるノードは

0 
0 
2 

なぜそれが起こるんを与えますか?関数は、コンテキストなしで呼び出された(そしてあなたは非strictモードで実行されている)

おかげ

+2

あなたはstackoverflowでコードの画像を投稿しません。テキストコードが必要です。 – Lewis

+1

これはV8とは関係ありませんが、Nodeとブラウザ*(グローバルスコープは 'window')*でグローバルスコープが動作する方法です。コンソールロギング 'this'を試してみてください。 – adeneo

答えて

6

グローバルオブジェクトへthisデフォルト。

ブラウザでソースコードの最上位は、グローバルコンテキストで実行され、そうwindow.aあるthis.aが、上部のグローバルコンテキスト内で宣言var aと同じです。 this.a = 1の割り当ては、a = 1の割り当てと同じです。 Node.jsのそれぞれにおいて、

のJavaScriptファイルには、グローバルな文脈から分離され、独自のモジュールのコンテキストを取得し、そのvar a = 0;がグローバルに作成されていない、とあなたはthis.a = 1;で作成したグローバルはモジュールによって陰にされるがaを所有しています。

+0

したがってノードconsole.log(b)では;モジュールからグローバルにbを得るためにスコープチェーンに入ります。ブラウザでは、コードはグローバルスコープで直接実行されます。 –

+0

ノードでは、コードはモジュールスコープにあり、ブラウザではコードはグローバルスコープです。ありがとう。 –

+0

@EuInsumiPruncはい、 'b'はグローバルでシャドーするモジュールで宣言された' b'がないので、両方で同じです。 – Paulpro

関連する問題