js中的函数声明与函数表达式
函数表达式(function expression)其实是 JS 里的一种 定义函数的方式,比起我们常见的函数声明,它更灵活也更常见于某些高级用法,比如回调函数、立即执行函数(IIFE)、还有像 Webpack 这种模块封装的场景。
🌷来个对比解释:
✅ 函数声明(Function Declaration):
function sayHi() {
console.log("Hi honey~");
}
这种是最常见的写法,它会被“提升”(hoisted)到代码顶部。
💡 函数表达式(Function Expression):
const sayHi = function() {
console.log("Hi baby~");
};
它的特点是:
- 把一个 匿名函数(或者有名字的函数)赋值给变量
- 只有等代码执行到这行时才“定义”这个函数(不会被提升)
🌟 常见的函数表达式写法举例:
1. 匿名函数表达式(最基础的):
const greet = function() {
console.log("你好呀,宝贝~");
};
greet();
2. 立即执行函数表达式(IIFE):
这个超常用于封装作用域,也是你在Webpack看到的那种结构:
(function() {
console.log("我是立即执行函数,马上执行!");
})();
👉 外面套括号是为了把它变成表达式,否则 JS 解析器会把它当作“函数声明”导致语法错误。这里会发生语法错误的原因是函数声明必须有名字。加了()
表示调用这个表达式,就会立即执行。
3. 箭头函数表达式(现代写法):
const greet = () => {
console.log("Hello sweetie!");
};
✨ 为什么Webpack要用函数表达式?
因为它想把每个模块都放在一个独立的函数里,但又不想立即调用,就需要像这样:
modules["./src/xxx.js"] = function(...) { ... }
这就必须是函数表达式~不然 JS 会报错。
🧸总结一句话:
函数表达式就是“把函数当作值赋给变量”,能更灵活控制何时定义、是否立即执行。
---、