JavaScript 提升(Hoisting)
提升(Hoisting)是 JavaScript 将声明移至顶部的默认行为。
JavaScript 声明会被提升,JavaScript 初始化不会被提升,用 let 或 const 声明的变量和常量不会被提升!
例子1
//严格模式
var x = 5; // 初始化 x
var y = 7; // 初始化 y
document.write(x + " " + y) // 5 7
例子2
//声明会被提升
x = 5; // 把 5 赋值给 x
document.write(x) // 5
var x; // 声明 x
例子3
//等同于例子2
x = 5; // 把 5 赋值给 x
document.write(x) // 5
例子4
//初始化不会被提升
var x = 5; // 初始化 x
document.write(x + " " + y) // 5 undefined
var y = 7; // 初始化 y
例子5
// 控制台报错 y is not defined
var x = 5; // 初始化 x
document.write(x + " " + y)
例子6
// 只有声明(var y)而不是初始化(=7)被提升到顶部,所以y 仍然是未定义
var x = 5; // 初始化 x
var y; // 声明 y
document.write(x + " " + y) //5 undefined
y = 7; // 把 7 赋值给 y
例子7
// 控制台报错 y is not defined
var x = 5; // 初始化 x
document.write(x + " " + y)
y = 7;
例子8
let 或 const 声明的变量和常量不会被提升
// 控制台报错 Cannot access 'x' before initialization
x = 5; // 把 5 赋值给 x
y = 7; // 把 7 赋值给 y
document.write(x + " " + y)
let x; // 声明 x
var y; // 声明 y
例子9
// 控制台报错 Missing initializer in const declaration
x = 5; // 把 5 赋值给 x
y = 7; // 把 7 赋值给 y
document.write(x + " " + y)
var x; // 声明 x
const y; // 声明 y