2017-09-01 5 views
0

次のコードスニペットを指定します。JavaScriptのグローバルオブジェクトとウィンドウオブジェクト

var name = 'John'; 
function foo() { 
    console.log(this.name); 
} 

foo(); 

なぜそれが私がブラウザでこのコードを実行すると、ログが名前を出力しますが、私はノードに、この同じコードスニペットを実行すると、それはundefinedを出力しているのですか?

ブラウザでthisがウィンドウオブジェクトを参照し、グローバル変数がウィンドウにアタッチされます。ノードthisはこの例のグローバルオブジェクトを参照するので、グローバル変数はウィンドウにアタッチされたときと同じようにグローバルオブジェクトにアタッチされません。

+0

[これはnodejsモジュールで何を意味していますか?](https://stackoverflow.com/questions/25058814/what-does-this-mean-in-a-nodejs-module) – jmargolisvt

+0

私はノードで実行し、出力として 'John'を取得します。 –

+0

これはバージョン管理の問題ですか?これは私のノードバージョンv7.7.4 –

答えて

1

Node.js globalは、ブラウザのグローバルスコープとは異なる動作をします。 globalの定義を参照してください。

ブラウザでは、トップレベルのスコープはグローバルスコープです。つまり、ブラウザ内では、何かが新しいグローバル変数を定義します。 Node.jsではこれが異なります。トップレベルのスコープはグローバルスコープではありません。 Node.jsモジュール内のvar somethingは、そのモジュールに対してローカルになります。

この質問は役に立ちました:Meaning of "this" in node.js modules and functions

+0

それでも、OPのコードは 'John'を表示するべきでしょうか? –

+0

https://stackoverflow.com/questions/15406062/in-what-scope-are-module-variables-stored-in-node-js –

+0

コードがモジュール内にある場合は適切です。多分OPがやっていることです。私はノード・シェル・セッションに直接コードを貼り付ける場合を考えていました。 –

0

グローバルスコープオブジェクトを参照するため、使用しないでください。ブラウザでは文書です。変数にアクセスしたい場合は、変数の名前を書きます。オペレーター付き。あなたはオブジェクトのプロパティにアクセスします。

関連する問題