关于javascript:这两个函数/方法有什么区别?

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;
}

两者之间有什么区别?为什么要使用第一种方法或第二种方法?


第一个是分配给vote变量的函数表达式,第二个是函数声明。

主要区别在于函数语句在分析时计算,它们在运行时声明之前可用。

也可以看看:

  • 命名函数表达式揭秘(文章)
  • 解释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

第二个是普通函数声明。