2017-05-04 48 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