[英]what's the difference between Browsers and Node?
瀏覽器和節點之間有什么區別? 例如:
節點上的setName.js
:
var setName;
setName = function (name) {
return this.name = name;
};
setName("LuLu");
//LuLu
console.log(name);
//undefined
console.log(this.name);
瀏覽器中的setName.html
:
<script>
var setName;
setName = function (name) {
return this.name = name;
};
setName("LuLu");
//LuLu
console.log(name);
//LuLu
console.log(this.name);
</script>
第二個日志不同,為什么?
Node是JavaScript引擎,而不是瀏覽器。 您在Node中看到undefined
的特定原因,以及瀏覽器中的Lulu
? 全局命名空間的差異 :
在瀏覽器中,頂級范圍是全局范圍。 這意味着在瀏覽器中,如果您在全局范圍內,
var something
會定義一個全局變量。 在Node中,這是不同的。 頂級范圍不是全球范圍; Node模塊內的var something
將是該模塊的本地內容。
在瀏覽器中, this
是對一個參考window
對象-瀏覽器的全局命名空間-對於其上調用獨立的對象的所有功能(例如, 不喜歡foo.bar()
在Node中, this
不是對全局命名空間的引用。
節點解釋器中的NB console.log(this.name)
將打印Lulu
,而不是undefined
。 那是因為, 僅在REPL中,
> this === global
true
進一步閱讀@ 如何節點:什么是“這個?”
好了,按照提示通過一個多編輯@ SIME維達斯關於評論this
在ES5嚴格模式 :
- 在全局上下文中(在任何函數之外),
this
指的是全局對象,無論是否處於嚴格模式。- 當
this
關鍵字出現在函數內部時,其值取決於函數的調用方式 。- 當一個函數被調用作為對象的方法,其
this
被設置為方法被調用的對象。
更有趣的閱讀由Juriy Zaytsev(又名@kangax)在他的一篇博客文章中提供 。
您的瀏覽器代碼具有window
主機對象。 節點沒有該主機對象。 設置this.name
,實際上是將其設置為window
對象,即創建全局變量。
window.name === this.name // true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.