Javascript函数定义语法

可能重复:
JavaScript:var functionName = function(){} vs function functionName(){}
在JavaScript中声明函数

我已经看到了2种不同的语法来定义javascript中的函数:

function f() { ... } 

以及

 var f = function() { ... }; 

这些有什么区别? 其中之一是否被弃用?

两者都不被弃用,两者都可以工作。 这里的区别在于一个是命名函数( function f() ),另一个是等于函数( var f = function() )的variables。

设置variables等于函数时必须小心。 这将工作:

 var f = function(n) { console.log(n); }; f(3); // logs 3 

但是这会打破,因为variables是调用之后定义的。

 f(3); // what is f? breaks. var f = function(n) { console.log(n); }; 

但正常的function正常工作。

 function abc(n) { console.log(n); } abc(3); // logs 3 xyz(5); // logs 5 function xyz(n) { console.log(n); } 

这是因为在执行之前对代码进行了分析,并且可以调用所有function。 但设置一个var等于一个函数就像设置一个var其他任何东西。 什么时候发生的顺序很重要。

现在有些更令人困惑的东西…

还有“自动执行”的匿名function。 他们有各种各样的名字。 最常见的做法是这样的:

 (function() { // code in here will execute right away // since the () at the end executes this (function(){}) })(); 

还有一个可以说是更好的版本。

 !function() { // again, the tailing () will execute this }(); 

看看这个堆栈溢出post更多关于匿名函数。