函数声明和函数表达式可以互换使用吗? [重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我正在学习Javascript中的函数,但对函数声明和函数表达式的使用感到困惑。

假设我有以下代码:

function callFunction(fn) {
  fn();
}

// function expression
var sayHello1 = function() {
  console.log("Hello World!");
}

// function declaration
function sayHello2() {
  console.log("Hello World!");
}

callFunction(sayHello1); // Hello World!
callFunction(sayHello2); // Hello World!

我们可以很容易地看到,当将sayHello1(函数表达式)和sayHello2(函数声明)传递到callFunction(fn)时,两者都生成相同的输出Hello World!

是否有任何实际情况我必须只使用函数声明/函数表达式,或者我可以一直使用它们?

非常感谢!

javascript node.js function functional-programming
1个回答
2
投票

他们都有自己的用例。函数声明是hoisted到脚本的顶部,可以在定义出现之前调用,而函数表达式只能在声明后调用。

sayHello1(); // Won't work since variable expression is created after call
sayHello2(); // Will work since function declarations are hoisted

var sayHello1 = function() {
  console.log("Hello World!");
}

function sayHello2() {
  console.log("Hello World!");
}

命名函数表达式对递归调用很有用:

var sayHello1 = function sayHelloFunc() {
  if (/* something */) {
    sayHelloFunc()
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.