ES6的let、const命令

1、let命令:

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

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

       结果:

以上代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。

       let命令很合适使用在for循环中。

var oLis = document.getElementsByTagName('li');
for (let i = 0; i < oLis.length; i++) {
// ...
     oLis[i].onclick = function(){
          console.log(i);// 0 1 2 3 4
     }
}
console.log(i);  // ReferenceError: i is not defined
// 这是因为上面代码相当与产生了几个块级作用域
{
     var i=0;
     oLis[i].onclick = function(){
          console.log(i);
     }
}
{
     var i=1;
     oLis[i].onclick = function(){
          console.log(i);
     }
}
// 以上代码,计数器i只在for循环体内有效,在循环体外引用就会报错。

因为ES5 只有全局作用域和函数作用域,没有块级作用域,这也带来了很多不合理的场景,let实际上为 JS新增了块级作用域。
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。
按照一般的逻辑,变量应该在声明语句之后才可以使用。为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。

2、const命令:
       常量是块级作用域,很像使用 let 语句定义的变量。
       const声明一个只读的常量。一旦声明,常量的值就不能改变。
       vconst声明的变量不得改变值,这也就是说,const一旦声明变量,就必须立即初始化,不能留到以后再进行赋值。

const PI = 3.1415;
PI = 3;
console.log(PI);// TypeError: Assignment to constant variable.
// 改变常量的值会报错。

发布了20 篇原创文章 · 获赞 64 · 访问量 2618

猜你喜欢

转载自blog.csdn.net/weixin_42881768/article/details/104576271
今日推荐