Javascript 函数声明和函数表达式可以互换使用吗?
我正在学习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!"
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()
}
}