What is the difference between these two functions/approaches?
我只使用jQuery编写JavaScript代码。 令我困惑的一件事是这两种写函数的方法,
第一种方法
1 2 3 4 5 | vote = function (action,feedbackId,responseDiv) { alert('hi'); return feedbackId; } |
第二种方法
1 2 3 4 5 | function vote(action, feedbackId,responseDiv) { alert('hi'); return feedbackId; } |
两者之间有什么区别?为什么要使用第一种方法或第二种方法?
第一个是分配给
主要区别在于函数语句在分析时计算,它们在运行时声明之前可用。
也可以看看:
- 命名函数表达式揭秘(文章)
- 解释JavaScript封装的匿名函数语法
1 | function myFunction() {} |
......被称为"功能声明"。
1 | var myFunction = function() {}; |
......被称为"函数表达式"。
它们非常相似;然而:
-
函数声明可以在引用后声明,而函数表达式必须在引用之前声明:
1
2
3
4
5
6
7// OK
myFunction();
function myFunction() {}
// Error
myFunction();
var myFunction = function() {}; -
由于函数表达式是一个语句,因此应该跟一个分号。
有关更多信息,请参阅Mozilla开发人员中心中的函数构造函数与函数声明与函数表达式。
函数声明语法不能在块语句中使用。
法律:
1 2 3 4 5 | function a() { function b() { } } |
非法:
1 2 3 4 5 6 7 | function a() { if (c) { function b() { } } } |
你可以这样做:
1 2 3 4 5 6 7 8 | function a() { var b; if (c) { b = function() { }; } } |
第一个是函数表达式,
1 2 3 | var calculateSum = function(a, b) { return a + b; } alert(calculateSum(5, 5)); // Alerts 10 |
第二个是普通函数声明。