可能重复:
JavaScript: var functionName = function() {} vs function functionName() {}
Declaring functions in JavaScript
我在javascript中看到了两种不同的语法来定义函数:
function f() {
...
}
以及
var f = function() {
...
};
这些有什么区别?其中一个被弃用了吗?
答案 0 :(得分:46)
两者都没有被弃用,两者都有效。这里的区别在于,一个是命名函数(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
}();
有关匿名函数的更多信息,请查看this Stack Overflow post。