2017-05-04 94 views
0

通过尝试重写我发生在这个奇怪的行为的函数。我希望能够在搜索并阅读了函数声明方法而没有成功之后找到答案。Javascript函数声明 - 不同的行为?

在脚本中,如果我声明这

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

someFunction(); 

someFunction = function(){ 
    alert("b"); 
} 

通过调用someFunction我将有"a"

输出,但如果我这样

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

someFunction(); 

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

声明的两个函数我的输出将是"b"

这里有什么区别?我明白第一个例子是赋予变量一个匿名函数。但第二个例子对我来说是完全意想不到的。

我在所有浏览器上测试过,输出结果是一样的。

回答

0

不同之处在于,您在第一个示例中调用了匿名函数,Javascript从顶部到底部进行了评估。在匿名函数的情况下,它实际上并没有被执行,直到它稍后被调用。

+0

我明白第一个例子,但为什么第二个是这样的? – Jonathan

+0

尝试给http://stackoverflow.com/a/336868/3604087阅读 – Ian

+0

@Jonathan因为你在全局范围内声明你的函数。你可以在你的.js文件的末尾编写你的函数,但仍然可以在第一行调用它。在“someFunction”的第二次声明之后,您将覆盖第一个。 – swdev95