菜单

ES陆 const用法

2019年5月5日 - 金沙前端
let b = 1;
//控制台输出undefined
window.b

ES6 const用法,es6const用法

1、const宣称3个只读的常量。一旦注明,常量的值就不能够改动。

2、const的成效域与let命令同样:只在宣称所在的块级功用域内有效。

3、const命令注脚的常量也是不升级,只还好宣称的职位后边使用。

4、ES6中:var命令和function一声令下注明的全局变量,还是是顶层对象的性质;另一方面规定,let命令、const命令、class一声令下评释的全局变量,不属于顶层对象的性质。也正是说,从
ES陆 初叶,全局变量将渐渐与顶层对象的属性脱钩。

let b = 1;
//控制台输出undefined
window.b

 

const用法,es陆const用法 一、 const
声美素佳儿个只读的常量。1旦注脚,常量的值就不能改换。 二、 const 的功用域与
let 命令同样:只在申明所在…

ps:以上实例所用let证明的a为常量所以正确应该全套改为使用const注明

对于复合类型的变量,变量名不指向数据,而是指向数据所在的地点。const
指令只是保障变量名指向的地点不改变,并不保证该地方的数量不改变,所以将一个目的注解为常量必须丰富小心。

const foo = {};
foo.prop = 123;
foo.prop// 123
foo = {}; // TypeError: "foo" is read-only

地点代码中,常量foo积存的是叁个地点,那一个地点指向1个指标。不可变的只是其一地址,即不可能把foo指向另三个地点,但目的自己是可变的,所以仍旧得感到其丰硕新属性。

const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

地点代码中,常量a是八个数组,那个数组本人是可写的,但是倘使将另3个数组赋值给a,就能报错。

window.a = 1;
a // 1

a = 2;
window.a // 2

顶层对象,在浏览器意况指的是window对象,在Node指的是global对象。ES五里面,顶层对象的属性与全局变量是等价的。上边代码中,顶层对象的性能赋值与全局变量的赋值,是一致件事。
ES陆为了退换那一点,壹方面规定,为了维持包容性,var命令和function
指令注解的全局变量,依旧是顶层对象的品质;另一方面规定,let命令、const命令、class命令注脚的全局变量,不属于顶层对象的性质。也正是说,从ES陆初阶,全局变量将逐年与顶层对象的性子脱钩。

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

上面代码中,全局变量a由var命令注解,所以它是顶层对象的脾性;全局变量b由let命令申明,所以它不是顶层对象的属性,重返undefined。

更详尽参考阮一峰let和const

 

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;

// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;

function  test(){
   {
        var  a = 1;
    }
    alert(a); a可以访问到alert出1
}

function test(){
    {
        let  a = 1;
    }
    alert(a); a不能够被访问到alert报错,因为let具有块级作用域,只在let 声明的那个作用域内可以访问
}

function test(){
    {
        let  a = 1;
        let  a = 2;  这样会报错在同一作用域下不能重复声明
    }
    alert(a); a不能够被访问到alert报错,因为let具有块级作用域,只在let 声明的那个作用域内可以访问
}

function test(){
    let  a  =  3;
    {
        let  a = 1;
        let  a = 2;  这样会报错在同一作用域下不能重复声明
    }
    alert(a); alert出3
}

function test(){
    let  a  =  3;  会报错,因为let在同一作用域下不允许重复声明,而var没用块级作用域相当于在这个作用域声明了a
    {
        var  a = 1;  var没有块级作用域相当于在外面声明了一个a
    }
    alert(a);  
}

function test(){
    var  a  =  3;  不会报错
    {
        let  a = 1;  这个let声明的a是在当前这个块级作用下的a,不受外面作用域下a的冲突影响
    }
    alert(a);  alert出3
}

function test(){
    let  a  =  3;  不会报错 因为a = 1 声明在全局 而let a = 3声明在function test()作用域下
    {
          a = 1;  没有声明符声明相当于在全局声明了一个a
    }
    alert(a);  alert出3  就近原则  let a = 3 在函数作用域内
}

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图