函数声明与函数定义的核心区别
函数声明和函数表达式在语法、提升行为以及使用场景上存在差异,以下是具体对比:
语法形式
- 函数声明:以
function关键字开头,直接定义函数名称和主体。function foo() { console.log("Function Declaration"); } - 函数表达式:将函数赋值给变量或属性,可以是匿名或具名函数。
const bar = function() { console.log("Function Expression"); };
变量提升(Hoisting)
- 函数声明:整体会被提升至作用域顶部,可在定义前调用。
foo(); // 正常执行 function foo() {} - 函数表达式:仅变量声明被提升(如
var或let/const的绑定),函数本体未被提升,定义前调用会报错。bar(); // TypeError: bar is not a function var bar = function() {};
作用域与使用场景
- 函数声明:通常用于全局或块级作用域中直接定义可复用函数。
- 函数表达式:适合作为回调、IIFE(立即执行函数)或动态赋值场景。
// IIFE 示例 (function() { console.log("IIFE"); })();
命名函数表达式
函数表达式可以具名,但该名称仅在函数内部可见,适用于递归或调试:
const factorial = function calc(n) {
return n <= 1 ? 1 : n * calc(n - 1);
};
console.log(factorial(5)); // 120
console.log(calc); // ReferenceError: calc is not defined
箭头函数的特殊性质
箭头函数是函数表达式的简写形式,无自己的 this 和 arguments:
const add = (a, b) => a + b;
1500

被折叠的 条评论
为什么被折叠?



