Javascript函数定义语法

Javascript函数定义语法,javascript,function,syntax,Javascript,Function,Syntax,可能重复: 我在javascript中看到了两种不同的定义函数的语法: function f() { ... } 以及 var f = function() { ... }; 这两者有什么区别?其中一个已经弃用了吗?两个都没有弃用,而且都可以使用。这里的区别在于,一个是命名函数(function f()),而另一个是等于函数的变量(var f=function()) 将变量设置为函数时必须小心。这将有助于: var f = function(n) { console.log

可能重复:

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

function f() {
   ...
}
以及

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

这两者有什么区别?其中一个已经弃用了吗?

两个都没有弃用,而且都可以使用。这里的区别在于,一个是命名函数(
function f()
),而另一个是等于函数的变量(
var f=function()

将变量设置为函数时必须小心。这将有助于:

var f = function(n) { console.log(n); };
f(3); // logs 3
但这会中断,因为变量是在调用它之后定义的

f(3); // what is f? breaks.
var f = function(n) { console.log(n); };
但是正常的功能可以正常工作

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

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

function xyz(n) { console.log(n); }
这是因为代码是在执行之前分析的,所有函数都可以调用。但是将一个var设置为一个函数就像将一个var设置为其他任何东西一样。发生的顺序很重要

现在来看一些更令人困惑的东西

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

(function() {
    // code in here will execute right away
    // since the () at the end executes this (function(){})
})();
还有一个可以说更好的版本

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

查看有关匿名函数的更多信息。

以下是对您的问题的回答:这是用适当的术语提出的问题您也可以使用自调用命名函数:
(function foo(){…}())
,或指定给变量的命名函数:
var foo=function bar(){…}。实际值得注意的区别是,一个是必须命名的函数声明,而一个函数表达式可以命名或匿名。@FelixKling很好。自调用的命名函数
(function foo(){…}())
很有趣,因为您可以从内部调用
foo
,但不能从外部调用。即使是以
的形式编写它!函数foo(){…}()。是的,当您有一个命名函数表达式时,该名称仅在函数本身内部可用。遗憾的是,IE在命名函数表达式方面存在一些问题(它会创建同一函数的两个副本),因此最好避免使用IE。但理论上它是有效的;)这是什么!在最后一个函数定义之前?@Juergen请参阅以获得更好的解释