ES6 let和const命令(4)

const声明的常量只在当前代码块有效。如果想设置跨模块的常量,可以采用下面的写法。

//constants.js模块
        export const A = 1;
        export const B = 3;
        export const C = 4;
        //test1.js模块
        import * as constants from './constants';
        console.log(constants.A);//1
        console.log(constants.b);//3
        //test2.js模块
        import {A,B} from './constants';
        console.log(A);//1
        console.log(B);//3

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

在ES5中,全局对象的属性与全局变量是等价的。

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

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

这种规定杯视为javaScript语言的一大问题,因为很容易不知不觉就创建了全局变量。ES为了改变这一点,一方面规定,var命令和function命令声明的全局变量依旧是全局对象的属性;另一方面规定,let命令、const命令和class命令声明的全局变量不属于全局对象的属性。

var a = 1;
        //如果在Node.js的REPPL环境,可以写成global.a
        //或者采用通用方式法,写成this.a
        window.a //1

        let b = 1;
        window.b//undefind

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

posted @ 2017-03-02 18:44  叫我小红依吧  阅读(114)  评论(0编辑  收藏  举报