函数声明和函数表达式可以互换使用吗? [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数声明和函数表达式可以互换使用吗? [重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我正在学习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!
。
是否有任何实际情况我必须只使用函数声明/函数表达式,或者我可以一直使用它们?
非常感谢!
答案
他们都有自己的用例。函数声明是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()
}
}
以上是关于函数声明和函数表达式可以互换使用吗? [重复]的主要内容,如果未能解决你的问题,请参考以下文章