美文网首页
ECMAScript 6 - 全局对象的属性

ECMAScript 6 - 全局对象的属性

作者: 庸者的救赎 | 来源:发表于2016-10-14 10:36 被阅读212次

全局对象是最顶层的对象,在浏览器环境指的是window对象,在Node.js指的是global对象。ES5之中,全局对象的属性与全局变量是等价的

window.a = 1;
console.log(a); // 1

a = 2;
window.a; // 2

上面代码中,全局对象的属性赋值与全局变量的赋值,是同一件事。(对于Node来说,这一条只对REPL环境适用,模块环境之中,全局变量必须显式声明成global对象的属性。)

未声明的全局变量,自动成为全局对象window的属性,这被认为是JavaScript语言最大的设计败笔之一。这样的设计带来了两个很大的问题,首先是没法在编译时就报出变量未声明的错误,只有运行时才能知道,其次程序员很容易不知不觉地就创建了全局变量(比如打字出错)。另一方面,从语义上讲,语言的顶层对象是一个有实体含义的对象,也是不合适的

ES6为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是全局对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。也就是说,从ES6开始,全局变量将逐步与全局对象的属性脱钩

var a = 1;

window.a; // 1

let b = 1;

window.b; // undefined

上面代码中,全局变量a由var命令声明,所以它是全局对象的属性;全局变量b由let命令声明,所以它不是全局对象的属性,返回undefined

生命不息,折腾不止...
I'm not a real coder,but i love it so much!

相关文章

  • ECMAScript 6 - 全局对象的属性

    全局对象是最顶层的对象,在浏览器环境指的是window对象,在Node.js指的是global对象。ES5之中,全...

  • 原型与原型链

    1.全局属性window ECMAScript规定全局对象叫做global,但是浏览器把window作为全局对象(...

  • 前端学习笔记之原型——一张图说明`prototype`和`__p

    全局变量 Global是是ECMAScript 中的全局对象(浏览器中是window),不属于其他对象的属性和方法...

  • 全局对象与临时转换

    全局对象 ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局对象 这些全局...

  • 全局对象

    全局对象 全局对象分为两种 ECMAScript规定 parseInt parseFloat Number( ) ...

  • 原型和原型链

    JS里的内置对象 全局对象 ECMAScript 规定全局对象叫做 global,浏览器默认全局对象是window...

  • 原型与原型链

    一、全局对象 ECMAScript把全局对象成为global,但浏览器里全局对象成为window 全局对象分为两种...

  • JavaScript对象

    全局对象 window ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局...

  • js原型与原型链

    全局对象 window ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局...

  • JavaScript的对象

    全局对象 window ECMAScript 规定全局对象叫做 global,但是浏览器把 window 作为全局...

网友评论

      本文标题:ECMAScript 6 - 全局对象的属性

      本文链接:https://www.haomeiwen.com/subject/kwpgyttx.html