JS——let的作用以及误区

let类似于var,不过它只在当前代码块中生效,

{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

在它的代码块外面,这个let a是找不到的,所以会显示未找到a。

  • 在for循环中就适合使用let,当它执行完毕了let的数据也就跟着销毁了
for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i);
// ReferenceError: i is not defined

这里执行会发现找不到i

  • 暂时性死区

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

常见案例

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

这里为什么会报错呢?

上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错

只要let声明写在后面前面就调用赋值,前面就一定会报错
但是到后面let声明后面的时候,输出它,会显示undefined
说明赋值没有进去,这种叫做暂时性死区

  • 看案例
if (true) {
  // TDZ开始
  tmp = 'abc'; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ结束
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}

  • 不允许重复声明
// 报错
function func() {
  let a = 10;
  var a = 1;
}

// 报错
function func() {
  let a = 10;
  let a = 1;
}

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

  1. ampipwcwwy说道:

    想想你的文章写的特别好https://www.ea55.com/

  2. niblhcasdb说道:

    不错不错,我喜欢看 https://www.ea55.com/

  3. xcxyztgsmh说道:

    看的我热血沸腾啊www.jiwenlaw.com

  4. pdkwlwifrb说道:

    想想你的文章写的特别好www.jiwenlaw.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注