只提升声明,不提升赋值。所以其实应该叫变量声明提升。
而且,非常奇葩的是,即使是声明与赋值同时写,也会拆开进行提升……
var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = "hello world"; } } f(); // undefined
这段代码首先扫描有没有var变量,有就拆开声明提升到上面去……尽管实际上不可能进入false语句,但是首先会扫描
只提升声明,不提升赋值。所以其实应该叫变量声明提升。
而且,非常奇葩的是,即使是声明与赋值同时写,也会拆开进行提升……
var tmp = new Date(); function f() { console.log(tmp); if (false) { var tmp = "hello world"; } } f(); // undefined
这段代码首先扫描有没有var变量,有就拆开声明提升到上面去……尽管实际上不可能进入false语句,但是首先会扫描