var, let, const,、 命令的理解和区别;

来源:互联网 发布:mac电脑怎么截长图 编辑:程序博客网 时间:2024/05/20 18:45

以下内容参考:
阮一峰 ECMAScript 6 入门
建议您阅读以上文章,它更为详细

let命令 ##:

只在命名它的代码块中有效,并且和const一样,不会发生变量提升和重复声明一个变量,这也就说明:在声明一个变量之前,这个变量都不可获取;

与var的区别: var声明的变量会发生 变量提升;我们在声明它之前可以获取到变量,由于变量提升它被定义为undefined;

let命声明的变量只在它声明的代码块中有效:

if(true){ let a = 1; var b =2;}console.log(a);//Uncaught ReferenceError: a is not defined//let声明的变量只在声明时所在的代码有效;所以这里会报错;console.log(b); // 2

let声明的变量不会发生变量提升:

if(true){ console.log(a);//Uncaught ReferenceError: a is not defined console.log(b);//undefined let a =1; var b =2;}

上面的代码也会报错,因为在let 声明变量之前,这个变量都是不可获取;

let不允许重复声明一个变量:

//报错 if(true){   let a =1;   let a =2; }//报错if(true){    var a =1;    let a =2;}//而var是可以的if(true){    var a =1;    var a =2;}

const命令

const声明的变量只是一个可读的变量,这意味着你不能重新赋值const命令声明的变量;

if(true){    const a= 1;    a =2;//报错}

上面会报错,因为const声明的变量不需要重新赋值,因为不运行重新赋值,所以我们在用cosnt声明变量的时候,要立刻初始化;

 if(true){  const a;  a =1; } 这段代码会报错,因为const不允许变量被重新赋值,它只能被读取;//正确的声明方式if(true){    cosnt a =1;}

和let一样cosnt命令的有效区也仅限于声明它时所在的代码块中;

if(true){    const a =1;}    console.log(a);//报错,if(true){    const a =1;    console.log(a);//1}

const也不会发生变量提升:

 if(true){     console.log(a);//报错     const a =1;}

const也不允许重复命令一个变量:

 if(true){     var a =1;     const a =2;//报错}

暂时性死区
只要在块级作用域内存在let或cosnt命令声明的变量,它们声明的变量就会绑定这个块级作用;也就是不受外部变量的影响;

var a =1;if(true){  console.log(a); //Uncaught ReferenceError: a is not defined  let a = 1;

上面的代码在打印a变量时,报错,原因是在let声明的变量a不受外部变量a的影响;let没有变量提升,所有在声明之前获取就会报错;

引用一段话:
ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

在let或const声明的变量之前,这个变量都不可以获取,这在语法上就叫 “暂时性死区”,也就是typeof()也不是一个百分比百的操作;

if(true){     type of(a); //报错     let a =1; }
原创粉丝点击