JavaScript函数定义语法

Javascript Function Definition Syntax

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
JavaScript: var functionName = function() {} vs function functionName() {}
Declaring functions in JavaScript

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

1
2
3
function f() {
   ...
}

以及

1
2
3
var f = function() {
    ...
};

这些有什么区别?其中一个被否决了吗?


两者都不推荐,两者都可以。这里的区别在于,一个是命名函数(function f()),另一个是等于函数(var f = function()的变量)。

当设置变量等于函数时必须小心。这将起作用:

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

但这将中断,因为变量是在调用它之后定义的。

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

但正常功能正常。

1
2
3
4
5
6
function abc(n) { console.log(n); }

abc(3); // logs 3
xyz(5); // logs 5

function xyz(n) { console.log(n); }

这是因为代码是在执行前分析的,所有函数都可以调用。但是,将var设置为函数就像将var设置为任何其他值一样。事情发生的顺序很重要。

现在,对于一些更令人困惑的事情…

还有"自执行"匿名函数。他们有各种各样的名字。最常见的方法如下:

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

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

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

有关匿名函数的更多信息,请查看此堆栈溢出日志。