2018-06-28 ecma 6 (頂層對(duì)象 的 屬性)

頂層對(duì)象的屬性

頂層對(duì)象  在瀏覽器環(huán)境中,指的是,window 對(duì)象, 在  node 環(huán)境中 指的是 global 對(duì)象。

es5 中,頂層對(duì)象 的 屬性,與, 全局變量 是 等價(jià)的。

    window.a = 1;

    a  //  1

    a = 2;

    window.a // 2


上面 代碼中,頂層對(duì)象 的 屬性 賦值,與,全局變量的賦值是 同一件事。

頂層對(duì)象的屬性 與 全局變量 相關(guān), 被認(rèn)為是  JavaScript  語(yǔ)言中 最大的設(shè)計(jì)敗筆之一。

這樣 的 設(shè)計(jì)帶來(lái)了幾個(gè)很大的問(wèn)題: 

首先,  無(wú)法 在編譯時(shí),就 提示 該變量 未聲明的錯(cuò)誤,只有運(yùn)行時(shí)才能知道(因?yàn)槿孔兞靠赡苁?頂層對(duì)象的屬性創(chuàng)造的,而屬性的創(chuàng)造是動(dòng)態(tài)的);

其次,程序員 很容易 不知不覺(jué) 的 就 創(chuàng)建 全局變量(比如 打字出錯(cuò))。 

最后,頂層對(duì)象的屬性,到處都 可以 讀寫(xiě)的,這 非常 不利于模塊化 編程。


ES6 為了 改變這一點(diǎn), 一方面 規(guī)定,為了保持 兼容性, var 命令 和 function 命令 聲明的全局變量,

依舊 是 頂層對(duì)象的屬性; 另一方面,規(guī)定,let 命令, const 命令 , class 命令  聲明的 全局變量,

將 不屬于 頂層對(duì)象的屬性。  從 ES6  開(kāi)始,全局變量,將逐步 與 頂層  對(duì)象的 屬性,隔離。
    var a = 1;
        
    // 如果 在 Node 的 REPL 環(huán)境,可以寫(xiě)成 global.a;

    // 或者 采用 通用的方法,寫(xiě)成 this.s

    window.a  //  1

    let b = 1;

    window.b   // undefined


上面的代碼中,全局變量 a  由  var 命令 聲明,所以 它是 頂層 對(duì)象的 屬性,全局變量  b 由  let 命令聲明, 所以 它 不是 頂層對(duì)象 的 屬性,返回 undefined。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容