【问题标题】:JavaScript:statements after return expression will be executed?JavaScript:返回表达式后的语句将被执行?
【发布时间】:2013-12-01 06:06:42
【问题描述】:

这是我遇到的代码:

var foo=1;
function bar(){
    foo=10;
    return;
    function foo(){}
}
bar();
alert(foo);

结果是1!

只是不知道为什么。

据我了解,第一行定义了一个全局变量'foo'给window对象,值为1,然后在bar函数中为foo赋值10,因为foo之前没有'var',所以全局变量 'foo' 将被赋值为 10。然后返回,函数的其余部分不会被执行。

但它会提醒 1。

同时删除bar函数中的函数foo定义,会提示10。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    欢迎来到 javascript 提升的神秘世界 :) 阅读本文,你会豁然开朗:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

    作为一个简短的回答:让事情像这样在 javascript 中工作:

    hello();
    
    function hello() {
        alert('hello');
    }
    

    Javascript 首先将所有函数声明移动到代码的顶部,因此您可以在定义函数“之前”调用任何函数。我相信如果有函数声明,foo 不会更改为 10 的原因是因为它的行为类似于var foo;。您正在本地定义一个函数,因此当它运行 foo = 10; 时,您只是用值 10 覆盖本地定义的 function foo()

    【讨论】:

    • 谢谢,所以 foo 被 foo 函数声明变成了一个局部变量。
    【解决方案2】:

    它返回 1 的原因是因为 foo=10function bar() 内部

    所以foo=10 是一个局部变量,你必须调用它的函数来改变 foo 变量

    例如,如果你这样做,它会提醒 10

    var foo=1;
    function bar(){
        foo=10;
        return;
        alert(foo);
    }
    bar();
    

    【讨论】:

    • 好的,谢谢伙计,我通过 JavaScript 的提升功能得到了它。函数声明使 foo 成为 bar 函数的局部变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2020-11-21
    • 2012-06-23
    • 2016-12-19
    相关资源
    最近更新 更多