浅谈ES6 let命令

淡淡的烟草味﹌ 2022-06-18 04:12 283阅读 0赞

ES5只有两种声明变量的方式:var和function,ES6还添加了两种常用的声明变量的方式:let和const。

const的介绍请见:http://blog.csdn.net/zhouziyu2011/article/details/68484960

下面介绍ES6的let命令:

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

1、for循环的计数器,就很合适使用let。

  1. var a = [];
  2. for (var i = 0; i < 10; i++) {
  3. a[i] = function() {
  4. console.log(i);
  5. }
  6. }
  7. a[6](); // 10

变量i是var声明的,在全局范围内有效,所以每次循环新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。

  1. var a = [];
  2. for (let i = 0; i < 10; i++) {
  3. a[i] = function() {
  4. console.log(i);
  5. }
  6. }
  7. a[5](); // 5

使用let,声明的变量仅在块级作用域内有效,最后输出的是5。

关于块级作用域的介绍请见:http://blog.csdn.net/zhouziyu2011/article/details/68484534

2、let不存在变量提升:let不像var那样会发生变量提升,所以,变量一定要在声明后使用,否则报错。

  1. console.log(i); // 输出:undefined
  2. console.log(j); // 报错
  3. var i = 5;
  4. let j = 10;

3、暂时性死区:

只要块级作用域存在let命令,它所声明的变量就绑定到这个区域,不再受外部的影响。

  1. var i= 6;
  2. if (i > 5) {
  3. i = 3; // 报错
  4. let i;
  5. }

ES6明确规定,若块作用域中存在let和const命令,则它们声明的变量,从一开始就形成了封闭作用域,凡是在声明之前就使用这些变量,就会报错。

在代码块内,使用let命令声明变量之前,该变量都是不可用的(不可赋值,不可访问等),这称为“暂时性死区”。

暂时性死区使得typeof操作不一定安全,所以在let声明之前,使用typeof操作符会报错。而在let出现之前,typeof是百分之百安全的,永远不会被报错,即使变量没有被声明,typeof也会返回undefined。

  1. if (true) {
  2. alert(typeof x); // 报错
  3. alert(typeof y); // undefined
  4. let x;
  5. }

暂时性死区的本质:只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

ES6规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止变量在声明前就使用该变量,从而导致意料之外的错误。这类错误在ES5中很常见。

4、不允许重复声明

let不允许在相同作用域内,重复声明同一个变量。

  1. function func() { // 报错
  2. var i= 1;
  3. let i = 1;
  4. }
  5. function func() { // 报错
  6. let i= 1;
  7. let i = 1;
  8. }

不能在函数内部重新声明参数。

  1. function func(arg) { // 报错
  2. let arg;
  3. }
  4. function func(arg) { // 不报错
  5. {
  6. let arg;
  7. }
  8. }

有关let和const的对比请见:http://blog.csdn.net/zhouziyu2011/article/details/71366078

发表评论

表情:
评论列表 (有 0 条评论,283人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6 let命令

               对let命令的理解 (a)基本用法介绍 ![这里写图片描述][20160413152025991]      ES6新增了let命令,用来声明变

    相关 ES6 const命令

    ES5只有两种声明变量的方式:var和function,ES6还添加了两种常用的声明变量的方式:let和const。 let的介绍请见:[http://blog.csdn.n

    相关 es6 let 和 const 命令

    一.let 1.作用域 在javascript中只有全局作用域和函数作用域,并不存在块级作用域。这样,在使用时就会出现一些问题。 下面我们先来举例说明let块级作用