本文共 1189 字,大约阅读时间需要 3 分钟。
使用 var 声明变量
var a = 1;function print() { console.log(a);}var a = 2;print(); // 打印2
if (Math.random() < 0.5) { var a = "abc"; console.log(a);} else { console.log(a);}console.log(a);
var abc = "123";console.log(window.abc);
ES6 不仅引入 let 关键字用于解决变量声明的问题,同时引入了块级作用域的概念
块级作用域:代码执行时遇到花括号,会创建一个块级作用域,花括号结束,销毁块级作用域
声明变量的问题
let 声明的变量不会挂载到全局对象
let 声明的变量,不允许当前作用域范围内重复声明
在块级作用域中用 let 定义的变量,在作用域外不能访问
使用 let 不会有变量提升,因此,不能在定义 let 变量之前使用它
底层实现上,let 声明的变量实际上也会有提升,但是,提升后会将其放入到“暂时性死区”,如果访问的变量位于暂时性死区,则会报错:“Cannot access ‘a’ before initialization”。当代码运行到该变量的声明语句时,会将其从暂时性死区中移除。
在循环中,用 let 声明的循环变量,会特殊处理,每次进入循环体,都会开启一个新的作用域,并且将循环变量绑定到该作用域(每次循环,使用的是一个全新的循环变量)
在循环中使用 let 声明的循环变量,在循环结束后会销毁
const 和 let 完全相同,仅在于用 const 声明的变量,必须在声明时赋值,而且不可以重新赋值。
实际上,在开发中,应该尽量使用 const 来声明变量,以保证变量的值不会随意篡改,原因如下:
注意的细节:
转载地址:http://lnlm.baihongyu.com/