Javascript函数声明-不同的行为?

Javascript函数声明-不同的行为?,javascript,Javascript,通过尝试重写函数,我出现了这种奇怪的行为。我希望在搜索并阅读了函数声明方法之后找到答案,但没有成功 在脚本中,如果我声明 var someFunction = function(){ alert("a"); } someFunction(); someFunction = function(){ alert("b"); } 通过调用someFunction我将得到的输出“a” 但是如果我这样声明这两个函数 function someFunction(){ alert

通过尝试重写函数,我出现了这种奇怪的行为。我希望在搜索并阅读了函数声明方法之后找到答案,但没有成功

在脚本中,如果我声明

var someFunction = function(){
    alert("a");
}

someFunction();

someFunction = function(){
    alert("b");
}
通过调用
someFunction
我将得到
的输出“a”

但是如果我这样声明这两个函数

function someFunction(){
    alert("a");
}

someFunction();

function someFunction(){
    alert("b");
}
我的输出将是
“b”


这里有什么区别?我知道第一个例子是给变量赋值一个匿名函数。但第二个例子对我来说是完全出乎意料和新鲜的


我在所有浏览器上进行了测试,结果都是一样的。

不同之处在于,在第一个示例中,您调用的是匿名函数,Javascript的计算自上而下。对于匿名函数,在以后调用它之前,它不会实际执行。

我理解第一个示例,但为什么第二个示例是这样的?请尝试给出一个示例read@Jonathan因为您正在全局范围内声明函数。您可以在.js文件的末尾编写函数,但仍然可以在第一行调用它。在第二次声明
someFunction
之后,您将覆盖第一次声明。