函数声明(Function Declaration)和函数表达式(Function Expression)是两种定义函数的方式,在 JavaScript 中有一些重要的区别。以下是它们的主要区别和特点:
1. 函数声明(Function Declaration)
2. 函数表达式(Function Expression)
定义方式:
const myFunction = function() {
console.log('Function Expression');
};
特性:
- 提升(Hoisting):函数表达式不会被提升,只有在函数表达式定义之后才能调用它。
- 语法:函数表达式是一个匿名函数(没有名称)或具名函数赋值给变量。
- 名称:可以是匿名函数或具名函数。匿名函数没有名字,而具名函数有名字。
示例:
// 错误:调用函数表达式之前不能使用
console.log(myFunction()); // TypeError: myFunction is not a function
const myFunction = function() {
return 'Function Expression';
};
console.log(myFunction()); // 输出: 'Function Expression'
3. 具名函数表达式
具名函数表达式是函数表达式的一种形式,其中函数有一个名字。
定义方式:
const myFunction = function namedFunction() {
console.log('Named Function Expression');
};
特性:
- 名称:函数有一个名字(
namedFunction
),该名称仅在函数内部可用,用于递归调用或调试。
- 提升:函数的名称不会被提升,但函数表达式本身的提升规则与普通函数表达式相同。
示例:
const myFunction = function namedFunction() {
return 'Named Function Expression';
};
console.log(myFunction()); // 输出: 'Named Function Expression'