标签: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
不允许在相同作用域内,重复声明同一个变量。
标签:javascrip class efi 新特性 cti 提升 结束 存在 error:
原文地址:https://www.cnblogs.com/tanghm/p/8044372.html