ES6頂層對象的屬性

/*頂層對象,在瀏覽器環(huán)境指的是window對象,在 Node 指的是global 對象 ES5 之中,
 頂層對象的屬性與全局變量是等價的*/

/* window.a = 1; a // 1
a = 2; window.a // 2 */

上面代碼中,頂層對象的屬性賦值與全局變量的賦值,是同一事.

頂層對象的屬性與全局變量掛鉤,被認為是 JavaScript 語言最大的設計敗筆之一。
這樣的設計帶來了幾個很大的問題,首先是沒法在編譯時就報出變量未聲明的錯誤,
只有運行時才能知道(因為全局變量可能是頂層對象的屬性創(chuàng)造的,而屬性的創(chuàng)造是動態(tài)的);
其次,程序員很容易不知不覺地就創(chuàng)建了全局變量(比如打字出錯);
最后,頂層對象的屬性是到處可以讀寫的,這非常不利于模塊化編程。
另一方面,window對象有實體含義,指的是瀏覽器的窗口對象,頂層對象是一個有實體含義的對象,也是
不合適的。
ES6 為了改變這一點,一方面規(guī)定,為了保持兼容性,var命令和function命令聲明的全局變量,
依舊是頂層對象的屬性;另一方面規(guī)定,let命令、const命令、class命令聲明的全局變量,
不屬于頂層對象的屬性。也就是說,從 ES6 開始,全局變量將逐步與頂層對象的屬性脫鉤
/* var a = 1; window.a // 1
如果在 Node 的 REPL 環(huán)境,可以寫成 global.a 或者采用通用方法,寫成 this.a;
let b = 1; window.b // undefined */

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,616評論 0 13
  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice閱讀 1,702評論 0 2
  • let 和 const 命令 let 命令 塊級作用域 const 命令 頂層對象的屬性 gl...
    安小明閱讀 1,047評論 0 0
  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    卞卞村長L閱讀 686評論 0 0
  • 本文屬個人筆記,不做詳解,僅供參考! let命令 基本用法 ES6 新增了let命令,用來聲明變量。它的用法類似于...
    R_yan閱讀 29,309評論 6 18

友情鏈接更多精彩內容