let与var 块级作用域
javaScript中没有块级作用域,执行JavaScript代码可能会获取到意想不到的结果。比如:
1 for (var index = 0; index < 5; index++) { 2 console.log(index) 3 } 4 console.log(index, '在外面访问index')
执行结果:

因为JavaScript没有块级作用域,在for循环结束后依旧会存在循环外部的执行环境中因此能够打印出来。
ECMAScript 6(简称ES6)中新增了块级作用域。同样的for循环
1 for (let index = 0; index < 5; index++) { 2 console.log(index) 3 } 4 console.log(index, '在外面访问index')
此时的执行结果:

对于let来说,for语句初始化变量的表达式所定义的变量,只会存在循环的环境中,在循环外部打印index ,只能报错。
扩展知识:
输出是什么?
1 function sayHi() { 2 console.log(name) 3 console.log(age) 4 var name = 'Lydia' 5 let age = 21 6 } 7 8 sayHi()
答案: undefined 和 ReferenceError
在函数内部,我们首先通过 var 关键字声明了 name 变量。这意味着变量被提升了(内存空间在创建阶段就被设置好了),直到程序运行到定义变量位置之前默认值都是 undefined。因为当我们打印 name 变量时还没有执行到定义变量的位置,因此变量的值保持为 undefined。
通过 let 和 const 关键字声明的变量也会提升,但是和 var 不同,它们不会被初始化。在我们声明(初始化)之前是不能访问它们的。这个行为被称之为暂时性死区。当我们试图在声明之前访问它们时,JavaScript 将会抛出一个 ReferenceError 错误。
------------------------------------------------------------2020.10.27 补充 ------------------------------------------------------------
delete操作符返回一个布尔值: true指删除成功,否则返回false. 但是通过 var, const 或 let 关键字声明的变量无法用 delete 操作符来删除。举个栗子


浙公网安备 33010602011771号