一、函数定义:两种基础形态
JavaScript函数可通过声明语句和表达式两种方式定义:
// 函数声明(提升生效)
function sum(a, b) {
return a + b;
}
// 函数表达式(执行阶段生效)
const multiply = function(a, b) {
return a * b;
};
二、箭头函数:颠覆this绑定规则
ES6箭头函数不仅简化语法,更彻底改变this指向规则:
// 传统函数this指向调用对象
const counter = {
count: 0,
increment: function() {
setInterval(function() {
this.count++; // this指向全局对象!
}, 1000);
}
};
// 箭头函数继承外层this
const counterFixed = {
count: 0,
increment: function() {
setInterval(() => {
this.count++; // this正确指向counter对象
}, 1000);
}
};
三、闭包:函数的记忆魔法
闭包让函数能够"记住"词法作用域,实现状态保存:
function createCounter() {
let privateCount = 0; // 私有变量
return {
increment: () => ++privateCount,
getValue: () => privateCount
};
}
const counter = createCounter();
counter.increment(); // 1
counter.getValue(); // 1
四、高阶函数:函数作为参数和返回值
函数作为一等公民,可作为参数传递和返回值使用:
// 函数作为参数(回调模式)
const users = ['Alice', 'Bob', 'Charlie'];
users.map(user => user.toUpperCase());
// 函数作为返回值(函数工厂)
function createValidator(rules) {
return function(value) {
return rules.every(rule => rule(value));
};
}
const isEmail = createValidator([
val => val.includes('@'),
val => val.length > 5
]);
五、立即执行函数(IIFE):模块化先驱
ES6之前,IIFE是创建私有作用域的主要手段:
// 创建独立作用域
const module = (function() {
let privateVar = 10;
return {
getValue: () => privateVar,
setValue: (val) => { privateVar = val; }
};
})();
module.getValue(); // 10
module.setValue(20);
JavaScript函数从简单的代码块进化为强大的编程构造块,理解其核心概念是掌握现代JavaScript开发的关键。随着ES6+新特性的加入,函数在异步编程、模块化、函数式编程等领域继续发挥着不可替代的作用。

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



