簡體   English   中英

瀏覽器和節點之間有什么區別?

[英]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維達斯關於評論thisES5嚴格模式

  • 在全局上下文中(在任何函數之外), this指的是全局對象,無論是否處於嚴格模式。
  • this關鍵字出現在函數內部時,其值取決於函數的調用方式
  • 當一個函數被調用作為對象的方法,其this被設置為方法被調用的對象。

更有趣的閱讀由Juriy Zaytsev(又名@kangax)他的一篇博客文章中提供

您的瀏覽器代碼具有window主機對象。 節點沒有該主機對象。 設置this.name ,實際上是將其設置為window對象,即創建全局變量。

window.name === this.name // true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM