跳到主要内容

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{} (单表达式时)。
    • 没有自己的 thisarguments 也不可用。
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 = () => {}
适用场景普通函数、递归动态定义、闭包简化函数、回调函数