首先:js 的作用域不是块级作用域而是函数作用域。(块级作用域:java花括号{})
举个栗子:--该栗子摘录javaScript权威指南(第6版)
var scope ="global";
function f(){
console.log(scope); // undefined
var scope="scope";
console.log(scope) // "scope"
}
当进入f() 时,会将所有变量的声明提前到第一行,但变量的赋值只会在var 那一行进行赋值。
在该方法中,局部变量覆盖全局变量但未赋值所以第一个scope 是 undefined,而后将其赋值,即可在控制台看到为scope。