初学者Javascript:'function xyz(){}'和'var xyz = function(){}'有什么区别?

3

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

我一直在学习CodeAcademy的JavaScript课程,但有些东西让我感到困惑。我理解函数如何工作,并尝试理解面向对象编程和对象/方法。

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

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

两者都可以实现相同的功能并产生相同的输出。它们是完全相同/可互换的吗?在创建函数时使用哪个并不重要。


你说得对 - 对我来说没有显示,因为原始问题不够描述!谢谢。 - JVG
1
没问题,被重定向到这样详细的答案感觉很不错。 - John
1个回答

8
第一个是函数声明,它被"提升",意味着它在任何上下文中都可以立即使用。
第二个是函数表达式,与任何其他变量声明/赋值一样处理。countToTwo的声明被提升并在其声明所在的范围内立即可用,但赋值保持不变。
简而言之,在解析表达式之前,无法调用声明为表达式的函数。
以下代码应该更清晰地说明了这一点。
foo();

//blah();

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

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

Live Demo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接