2018-06-28 ecma 6 (顶层对象 的 属性)

顶层对象的属性

顶层对象  在浏览器环境中,指的是,window 对象, 在  node 环境中 指的是 global 对象。

es5 中,顶层对象 的 属性,与, 全局变量 是 等价的。

    window.a = 1;

    a  //  1

    a = 2;

    window.a // 2


上面 代码中,顶层对象 的 属性 赋值,与,全局变量的赋值是 同一件事。

顶层对象的属性 与 全局变量 相关, 被认为是  JavaScript  语言中 最大的设计败笔之一。

这样 的 设计带来了几个很大的问题: 

首先,  无法 在编译时,就 提示 该变量 未声明的错误,只有运行时才能知道(因为全部变量可能是 顶层对象的属性创造的,而属性的创造是动态的);

其次,程序员 很容易 不知不觉 的 就 创建 全局变量(比如 打字出错)。 

最后,顶层对象的属性,到处都 可以 读写的,这 非常 不利于模块化 编程。


ES6 为了 改变这一点, 一方面 规定,为了保持 兼容性, var 命令 和 function 命令 声明的全局变量,

依旧 是 顶层对象的属性; 另一方面,规定,let 命令, const 命令 , class 命令  声明的 全局变量,

将 不属于 顶层对象的属性。  从 ES6  开始,全局变量,将逐步 与 顶层  对象的 属性,隔离。
    var a = 1;
        
    // 如果 在 Node 的 REPL 环境,可以写成 global.a;

    // 或者 采用 通用的方法,写成 this.s

    window.a  //  1

    let b = 1;

    window.b   // undefined


上面的代码中,全局变量 a  由  var 命令 声明,所以 它是 顶层 对象的 属性,全局变量  b 由  let 命令声明, 所以 它 不是 顶层对象 的 属性,返回 undefined。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容