JavaScript:返回表达式后的语句会被执行吗?

时间:2013-12-01 06:06:42

标签: javascript

以下是我遇到的代码:

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

结果是1!

只是不知道为什么。

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

但它警告1。

在bar函数中删除函数foo定义时,它会发出警报10.

2 个答案:

答案 0 :(得分:3)

欢迎来到javascript悬挂的神秘世界:)阅读这篇文章,你将受到启发:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

作为一个简短的回答:使用这样的javascript工作:

hello();

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

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

答案 1 :(得分:1)

返回1的原因是因为foo=10位于function bar()

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

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

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