Javascript函数定义语法

Cap*_*man 45 javascript syntax function

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

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

function f() {
   ...
}
Run Code Online (Sandbox Code Playgroud)

以及

var f = function() {
    ...
};
Run Code Online (Sandbox Code Playgroud)

这些有什么区别?其中一个被弃用了吗?

Mar*_*all 46

两者都没有被弃用,两者都有效.这里的区别在于,一个是命名函数(function f()),而另一个是等于函数(var f = function())的变量.

设置等于函数的变量时必须小心.这将有效:

var f = function(n) { console.log(n); };
f(3); // logs 3
Run Code Online (Sandbox Code Playgroud)

但是这会破坏,因为变量是调用它之后定义的.

f(3); // what is f? breaks.
var f = function(n) { console.log(n); };
Run Code Online (Sandbox Code Playgroud)

但正常的功能很好.

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

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

function xyz(n) { console.log(n); }
Run Code Online (Sandbox Code Playgroud)

这是因为在执行之前会对代码进行分析,并且所有函数都可以调用.但是将var设置为等于函数就像将var设置为其他任何东西.它何时发生的顺序很重要.

现在有些令人困惑的东西......

还有"自动执行"的匿名功能.他们有各种各样的名字.最常见的方法看起来像这样:

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

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

!function() {
    // again, the tailing () will execute this
}();
Run Code Online (Sandbox Code Playgroud)

有关匿名函数的更多信息,请查看此Stack Overflow帖子.

  • 是什么 !在最后一个函数定义之前? (6认同)
  • @Juergen有关详细说明,请参见http://stackoverflow.com/questions/3755606/what-does-the-exclamation-mark-do-before-the-function (2认同)