JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终可见.变量在声明之前已经可用,即”声明提前”.
1var a = "global";
2function f(){
3 console.log(a); //=>undefined,不是global
4 var a = "local";
5 console.log(a); //=>local
6}
//因为var a在函数第4行声明,所以当执行3行时,相当于var a;已经覆盖了全局的"global",只是这是a没有被赋值,只有执行到4行时a才被赋值,所以3行输出undefined而5行输出local.
该代码相当于这样
var a = "global";
function f(){
var a;
console.log(a); //=>undefined,不是global
a = "local";
console.log(a); //=>local
}
//所以好的编程习惯是将变量声明放在函数体顶部.