JS 函数声明与表达式
函数声明(Function Declaration)
函数声明是最常见的定义函数方式,语法如下:
js
// 函数声明
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet("Alice")); // 输出: Hello, Alice!
-
特点:
- 可以在声明之前调用(函数提升 hoisting)。
- 有名字(
greet),便于调试和递归调用。
函数表达式(Function Expression)
函数表达式是把一个函数赋值给变量,语法如下:
js
// 匿名函数表达式
const greet = function(name) {
return `Hello, ${name}!`;
};
console.log(greet("Bob")); // 输出: Hello, Bob!
-
特点:
- 不会提升,必须在定义之后调用。
- 可以是匿名或具名函数。
js
// 具名函数表达式
const greet = function sayHello(name) {
return `Hello, ${name}!`;
};
console.log(greet("Carol")); // 输出: Hello, Carol!
sayHello只在函数内部可用(递归时有用)。
箭头函数(Arrow Function)
ES 6 引入箭头函数,简化函数表达式写法:
js
const greet = (name) => `Hello, ${name}!`;
console.log(greet("David")); // 输出: Hello, David!
-
特点:
- 语法简洁,可省略
return和{}(单表达式时)。 - 没有自己的
this,arguments也不可用。
- 语法简洁,可省略
js
// 多参数
const add = (a, b) => a + b;
console.log(add(2, 3)); // 输出: 5
// 无参数
const sayHi = () => console.log("Hi!");
sayHi(); // 输出: Hi!
区别总结
| 特性 | 函数声明 | 函数表达式 | 箭头函数 |
|---|---|---|---|
| 提升 | 会提升 | 不会提升 | 不会提升 |
| this | 动态绑定 | 动态绑定 | 词法绑定 |
| 语法 | function fn() {} | const fn = function(){} | const fn = () => {} |
| 适用场景 | 普通函数、递归 | 动态定义、闭包 | 简化函数、回调函数 |