0
点赞
收藏
分享

微信扫一扫

ES6系列——let和const命令

静悠 2022-03-14 阅读 54

let

一:作用域

  1. 基本使用
    声明:ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{
  let a = 10;
  var b = 12;
  console.log(a); // 10
}
console.log(a); // ReferenceError: a is not defined
console.log(b); // 12
  1. for循环中的应用
    下面我们来看一道经典面试题:为什么 i 打印的结果为10 ,怎么才能正确打印呢?
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

解析:上述代码中 i 是用var声明的是全局变量,每一次循环 i 都会进行变化。数组 a 里面的函数内部的 i 指向的是全局的 i ,所以 a 数据里面的 i 和for循环里面的都是同一个 i 从而导致运行时输入最后一轮 i 的值 10解决办法可以使用let

var b = [];
for (let i = 0; i < 10; i++) {
  b[i] = function () {
    console.log(i);
  }
}
b[5]() // 5

解析:i 是使用let声明的,只在本次循环中有效,每次循环的 i都是一个新的变量,所以最后输入的是5

二:不能重复声明

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

{
  var a = 10;
  let a = 8; // 报错
}

{
  let a = 10;
  let a = 20; // 报错
}

function func(fn) {
  let fn // 标识符“fn”已被声明
}

function func(fn) {
  {
    let fn // 没有报错
  }
}

四:不存在变量提升

var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。而在ES6中 let改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。

console.log(a); // undefined
var a = 10;

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 3;
函数提升

五:暂时性死区

const

举报

相关推荐

0 条评论