我一直在浏览Javascript函数范围并遇到过这个问题:
var scope = "global";
function f(){
console.log(scope);
var scope = "local";
console.log(scope);
}
f();
现在我明白第一个日志的输出是“未定义的”,因为js如何在函数顶部提升变量。但是当我从“var scope =”local“;”中删除var时第一个日志输出“全局”,这让我摸不着头脑。有人可以解释为什么会这样吗?我的意思是不是js顺序运行代码?因此,如何删除VAR对第一个日志有什么影响?
答案 0 :(得分:2)
双遍解析。代码将被视为
function f() {
var scope; // var created, but no value assigned. this overrides the earlier global
console.log(scope);
scope = 'local';
console.log(scope);
}
var的CREATION将被执行,就像它是函数中执行的第一个代码一样。但实际的分配操作不会发生,直到正常情况发生。
答案 1 :(得分:1)
Javascript有时与其他语言略有不同。看看http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html,他们会解释一下。
答案 2 :(得分:1)
如果省略var语句,则第一个日志使用全局变量,该变量使用字符串“global”设置。没有其他的局部变量也没有吊装。