Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数声明和函数表达式可以互换使用吗?_Javascript_Node.js_Function_Functional Programming - Fatal编程技术网

Javascript 函数声明和函数表达式可以互换使用吗?

Javascript 函数声明和函数表达式可以互换使用吗?,javascript,node.js,function,functional-programming,Javascript,Node.js,Function,Functional Programming,我正在学习Javascript中的函数,但对函数声明和函数表达式的使用感到困惑 假设我有以下代码: function callFunction(fn) { fn(); } // function expression var sayHello1 = function() { console.log("Hello World!"); } // function declaration function sayHello2() { console.log("Hello World!"

我正在学习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

是否存在这样的真实情况,即我必须只使用函数声明/函数表达式,或者我可以始终交替使用它们


非常感谢

它们都有各自的用例。函数声明位于脚本顶部,可以在定义出现之前调用,而函数表达式只能在声明之后调用

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()
  }
}