爲什麼這個不行:命名以前匿名函數打破
$(document).on('click','a',myFunction);
var myFunction = function() {
debugger;
}
當這樣做:
$(document).on('click','a',function() {
debugger;
}
我開始學會命名我所有的匿名函數,並打破他們更多分成他們自己獨立的命名功能。
爲什麼這個不行:命名以前匿名函數打破
$(document).on('click','a',myFunction);
var myFunction = function() {
debugger;
}
當這樣做:
$(document).on('click','a',function() {
debugger;
}
我開始學會命名我所有的匿名函數,並打破他們更多分成他們自己獨立的命名功能。
不要說:
var myFunction = function() {
debugger;
}
你需要說:
function myFunction() {
debugger;
}
這將宣佈在第一輪的功能,使得它可以在程序執行過程中被引用。
你必須換行:
var myFunction = function() {
debugger;
}
$(document).on('click','a', myFunction);
否則,你會assigning undefined
作爲事件處理程序,如變量myFunction
沒有一個值然而,當你將它傳遞給.on
。
另外:將一個函數賦值給一個像這樣的變量沒有命名的變量,它仍然是一個匿名函數,只是存儲在一個變量中。命名函數是:
var myFunction = function someName() {
debugger;
}
哇。 JavaScript永遠不會讓我感到意外。這就是爲什麼我問這些基本問題,因爲我總是學到一些我從未期望的東西。 –
@Benjamin感謝編輯,這些鏈接使答案更好。 – bfavaretto
哦,這是因爲我必須在引用它之前定義函數。它必須在源代碼順序上面。 –
但是沒有辦法提升函數聲明嗎? –
函數*聲明*總是被掛起。但是你有什麼不是聲明,它是一個函數*表達式*。有關詳細信息,請參閱我答案底部鏈接的文章。 – bfavaretto