JavaScript奇怪的作用域行为
作者:互联网
我一直在研究Javascript函数范围,并遇到了这个问题:
var scope = "global";
function f(){
console.log(scope);
var scope = "local";
console.log(scope);
}
f();
现在,我知道第一个日志的输出是“未定义”的,因为js如何在函数顶部提升变量.但是,当我从“ var scope =“ local”;“中删除var时第一个日志输出“ global”,这让我抓狂了.有人可以解释为什么会这样吗?我的意思是js不按顺序运行代码吗?这样,如何删除VAR会对第一个日志产生任何影响?
解决方法:
两遍解析.该代码将被视为
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将被执行,就好像它是函数中执行的代码的第一位一样.但是,实际的分配操作要到正常情况下才会发生.
标签:scoping,javascript 来源: https://codeday.me/bug/20191012/1899309.html