概念:变量和函数的声明会在物理层面移动到代码的最前面,但这么说也并不准确。实际上变量和函数在代码里的位置是不会变的,而是在编译阶段被放入内存中。
常见的示例如下:
var x = 1; // 声明 + 初始化 x console.log(x + " " + y); // '1 undefined' var y = 2; // 声明 + 初始化 y //上面的代码和下面的代码是一样的 var x = 1; // 声明 + 初始化 x var y; // 声明 y console.log(x + " " + y); // y 是未定义的 y = 2; // 初始化 ylet 的作用域是块级的
{var a = 1} {let d = 1} console.log(a) console.log(d) // Uncaught ReferenceError: d is not defined 不能重复声明 var a = 1; var a = 2; let b = 1; let b = 2; // Uncaught SyntaxError: Identifier 'b' has already been declared 暂时死区 console.log(a) // undefined console.log(b) // 报错 Uncaught ReferenceError: b is not defined var a = 1 var b = 1给一个例子来看一下输出结果:
var a = 1; function b() { a = 10; return; function a() {} } b(); console.log(a) // 1 // 解析:函数b 等同于以下写法 function b() { var a = function () {} a = 10 return }