var scope = "global";
function f(){
console.log(scope);//输出"undefined",而不是"global"
var scope = "local";//变量是在这里赋初始值的,但是变量本身在函数体内任何地方均是有定义的
console.log(scope);//输出"local"
}
原因解释
由于局部变量本身在函数体内任何地方均是有定义的,也就是说,在函数体内局部变量覆盖了同名全局变量.
上述过程等价于:将函数内的变量声明"提前"至函数体顶部,同时变量初始化留在原来的位置.等价如下代码
var scope = "global";
function f(){
var scope;//在函数顶部声明了局部变量
console.log(scope);//变量存在,但其值为"undefined"
scope = "local";//这里将其初始化并赋值
console.log(scope);//这里他拥有了我们期望的值
}
参考链接:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/var#var_hoisting
javascript函数作用域和变量声明提前(variable hoisting)
最新推荐文章于 2020-10-31 23:09:46 发布