3

可能重复:
JavaScript:var functionName = function() {} vs function functionName() {}

我一直在学习 CodeAcademy 的 Javascript 课程,但有些事情已经超出了我的想象。我了解函数是如何工作的,并且我正试图围绕 OOP 和对象/方法展开思考。

我的问题是,创建这样的函数有什么区别:

function countTo(number){
    for (var i=1; i<=number; i++){
        console.log(i);
    }
}

countTo(15);

并创建一个这样的函数:

var countToTwo = function(number){
    for (var i=1; i<=number; i++){
        console.log(i);
    }
};

countToTwo(27);

两者都做同样的事情并具有相同的输出。它们是否完全相同/可互换?创建函数时使用哪一个有关系吗?

4

1 回答 1

8

第一个是函数声明,并且是“提升的”,这意味着它可以立即在上下文中的任何位置使用。

第二个是函数表达式,其处理方式与任何其他变量声明/赋值一样。的声明countToTwo提升并在声明它的范围内的任何地方立即可用,但分配保持在完全相同的位置。

简而言之,在解析表达式之前,您无法调用声明为表达式的函数。

这段代码应该更清楚地说明。

foo();

//blah();

function foo(){
    alert('hoisted and works');
}

var blah = function(){
    // not hoisted, would fail if called
}
​

现场演示

于 2012-12-11T03:40:38.467 回答