码迷,mamicode.com
首页 > 其他好文 > 详细

ES6新特性——let

时间:2020-02-03 19:00:02      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:javascrip   class   efi   新特性   cti   提升   结束   存在   error:   

作用域

与var不同,let的作用域只在声明的let语句所在的代码块,像这样

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

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

 在for语句中,如果用 var = i 计数,则 i 是一个全局变量,每次循环都依靠一个 i ,循环结束后,i 为最大值

 而 let = i 则不一样,每次循环,i 都将被重新定义,js内部引擎会记住上一轮 i 的值,而且,用循环体内和 for(...) 是两个作用域,因此即使定义了相同的变量也互不影响

 像这样:

(用 var 定义)

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

 (用 let 定义)

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

 (定义两个相同变量)

for (let i = 0; i < 3; i++) {
  let i = ‘abc‘;
  console.log(i);
}
// abc
// abc
// abc

 

不存在变量提升

用 let 时,不存在变量提升,即在变量未声明前,使用变量会输出 undefined ( var 是这样 ), 但 let 会直接报错,像这样:

console.log(foo); // 输出undefined
var foo = 2;

// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;

暂时性死区 

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

不允许重复声明

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

ES6新特性——let

标签:javascrip   class   efi   新特性   cti   提升   结束   存在   error:   

原文地址:https://www.cnblogs.com/tanghm/p/8044372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!