JavaScript的作用域是指在函数内声明的所有变量在函数体内始终是可见的。
有意思的是,这意味着变量在声明之前甚至已经可用。
var scope="globle";
function f(){
console.log(scope);//输出“ undefined”,而不是“global”
var scope="local";
console.log(scope);//输出“local”
}
你可能会误以为函数中的第一行会输出“globle”,因为代码还没有执行到var声明局部变量的地方。
其实不然,由于函数作用域的特性,局部变量在整个函数体始终是有定义的,也就是说,在函数体内
局部变量遮盖了全局变量。因此,上述过程等价于:将函数内的变量声明“提前”值函数体顶部吗,
同时变量初始化留在原来的位置:
var scope="globle";
function f(){
var scope;
console.log(scope);//输出“ undefined”,而不是“global”
var scope="local";
console.log(scope);//输出“local”
}