ES6-let和const命令

ES6-let和const命令

在阮一峰老师的ES6文章中,已经很详细的介绍了let和const命令.

let命令

let命令是ES6新增的,用来声明变量。用法类似于var,但是let命令只在代码块内有效。

  • 基本用法
{
     
  let b = 10000;
  var c = 1000;
}
b // 报错:ReferenceError:a is not defined
c // 1000 
  • 循环中使用let命令
for(let i = 0; i < 5; i++){
     
  //segment
  //...
}
console.log(i);//ReferenceError:i is not defined
for(var i = 0;i < 5; i++){
     
  //segment
  //...
}
console.log(i);//5

let 定义的i只在循环体中有效,而var命令定义的i是全局的变量

  • let不存在变量提升
//var命令的变量提升
console.log(aaa);
var aaa = 2;
//等价于
var aaa;
console.log(aaa);
aaa = 2;

//let命令不存在变量提升
console.log(bbb);//报错ReferenceError
let bbb = 2;
  • 暂时性死区

    • 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响

    • 在代码块内,使用let命令声明变量之前,该变量都是不可用的

var a = 111;
if (true){
     
  a = 222;//ReferenceError
  let a;
}//在let命令声明变量tmp之前,都属于变量tmp的“死区”。
  • 不允许重复声明
{
     
  let a = 10;//let命令重复声明,导致报错
  var a = 100;
  
  let b = 100;//相同报错,不可重复声明
  let b = 10;
}

块级作用域

所谓块级作用域,就是一个代码块,由一个花括号包裹。

//举例1:以下就是一个最普通的代码块
{
     
  //segment1;
  //segment2;
  //segment3;
  //...
}
//举例2:这是一个for循环
// 花括号中也是一个代码块,let命令定义的a只在这循环中有用
for(let i = 0 ; i < 2 ; i++){
     
 	let a = 10;
  var b = 0;
}
console.log(a);//报错
console.log(b);//0
  • 块级作用域可以任意嵌套
{
     
  {
     
    {
     
      {
     
        let c = 0;
      }
      console.log(c);//报错
    }
  }
}

const命令

const命令声明的是一个只读的常量。

  • 一旦声明,常量的值就不允许改变。
const PI = 3.1415926;
console.log(PI);//3.1415926

PI = 3;
//TypeError: Assignment to constant variable.
  • 一旦创建,必须赋初值
const PI;
//SyntaxError:Missing initializer in const declaration
  • 作用域let命令相同:只在声明所在的块级作用域内有效
{
     
  const PI = 3.1415926;
}
console.log(PI);//Uncaught ReferenceError:PI is not defined
  • const命令不存在提升
console.log(PI);//ReferenceError
const PI = 3.1415926;

顶层对象的属性

顶层对象,在流浪器环境指的是window对象

  • 顶层对象的属性赋值与全局变量的赋值
window.a = 1;
console.log(a);//1
a = 2;
window.a //2
  • var命令function命令声明的全局变量,依旧是顶层对象的属性
  • let命令const命令class命令声明的全局变量,不属于顶层对象的属性

以上就是let和const命令的全部内容了,若有出错,请及时指出,谢谢!

你可能感兴趣的:(JavaScript,JS,javascript,js)