您的位置:首页 > Web前端 > JavaScript

javascript函数作用域和变量声明提前(variable hoisting)

2016-07-07 00:07 567 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: