2017-09-01 133 views
0

給定以下代碼片段。JavaScript全局對象vs窗口對象

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

foo(); 

爲什麼當我運行日誌輸出名稱瀏覽器的代碼,但是當我在節點上運行相同的代碼片斷它輸出undefined

在瀏覽器中this引用窗口對象,並且全局變量將被附加到窗口。現在在節點this中將引用本例中的全局對象,那麼我的全局變量不會附加到全局對象,就像它在瀏覽器中連接到窗口時一樣?

+0

可能重複[在nodejs模塊中「this」是什麼意思?](https://stackoverflow.com/questions/25058814/what-does-this-mean-in-a-nodejs-module) – jmargolisvt

+0

When我在node中運行它,我得到'John'作爲輸出。 –

+0

可能是一個版本問題?這是我的節點版本v7.7.4 –

回答

1

Node.js global在瀏覽器中的作用與全局作用域不同。有關更多信息,請參閱global的定義:

在瀏覽器中,頂級範圍是全局範圍。這意味着在瀏覽器中var會定義一個新的全局變量。在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在做的事情。我正在考慮將代碼直接粘貼到節點shell會話中的情況。 –

0

您不應該使用它,因爲它引用了全局作用域對象。在瀏覽器中它是文檔。如果你想訪問你的變量,只需寫下它的名字。與運營商。你訪問一個對象的屬性。