编程语言
首页 > 编程语言> > JavaScript奇怪的作用域行为

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