2013-04-01 78 views
1

为什么这个不行:命名以前匿名函数打破

$(document).on('click','a',myFunction); 
var myFunction = function() { 
    debugger; 
} 

当这样做:

$(document).on('click','a',function() { 
    debugger; 
} 

我开始学会命名我所有的匿名函数,并打破他们更多分成他们自己独立的命名功能。

+2

哦,这是因为我必须在引用它之前定义函数。它必须在源代码顺序上面。 –

+0

但是没有办法提升函数声明吗? –

+1

函数*声明*总是被挂起。但是你有什么不是声明,它是一个函数*表达式*。有关详细信息,请参阅我答案底部链接的文章。 – bfavaretto

回答

0

不要说:

var myFunction = function() { 
    debugger; 
} 

你需要说:

function myFunction() { 
    debugger; 
} 

这将宣布在第一轮的功能,使得它可以在程序执行过程中被引用。

4

你必须换行:

var myFunction = function() { 
    debugger; 
} 
$(document).on('click','a', myFunction); 

否则,你会assigning undefined作为事件处理程序,如变量myFunction没有一个值然而,当你将它传递给.on

另外:将一个函数赋值给一个像这样的变量没有命名的变量,它仍然是一个匿名函数,只是存储在一个变量中。命名函数是:

var myFunction = function someName() { 
    debugger; 
} 

详情请参阅Named function expressions demystified

+0

哇。 JavaScript永远不会让我感到意外。这就是为什么我问这些基本问题,因为我总是学到一些我从未期望的东西。 –

+1

@Benjamin感谢编辑,这些链接使答案更好。 – bfavaretto