let 与 var 的一个重要的区别就是 let 声明的变量不会在作用域中被提升。在解析代码时,JavaScript 引擎也会注意出现在块后面的 let 声明,只不过在此之前不能以任何方式来引用未声明的变量。在 let 声明之前的执行瞬间被称为“暂时性死区”(temporal dead zone),在此阶段引用任何后面才声明的变量都会抛出 ReferenceError。const 的行为与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改 const 声明的变量会导致运行时错误。
// name 会被提升
console.log(name); // undefined
var name = 'Matt';
// age 不会被提升
console.log(age); // ReferenceError:age 没有定义
let age = 26;
注:var的创建和初始化会被提升,赋值不会被提升。let的创建被提升,初始化和赋值不会被提升。function的创建、初始化和赋值均会被提升。(初始化就是给变量先赋值成undefined)