js函数实现
函数声明与表达式
在JavaScript中,函数可以通过声明或表达式两种方式定义。函数声明会被提升(hoisted),允许在定义前调用;函数表达式则需先定义后调用。
// 函数声明
function greet(name) {
return `Hello, ${name}!`;
}
// 函数表达式(匿名)
const greet = function(name) {
return `Hello, ${name}!`;
};
// 箭头函数表达式(ES6)
const greet = (name) => `Hello, ${name}!`;
参数与返回值
函数可接收参数并返回结果。未显式返回时,默认返回 undefined。支持默认参数和剩余参数(Rest Parameters)。
// 默认参数
function multiply(a, b = 1) {
return a * b;
}
// 剩余参数
function sum(...numbers) {
return numbers.reduce((acc, num) => acc + num, 0);
}
高阶函数
函数可作为参数传递或作为返回值,这类函数称为高阶函数。常见于回调、事件处理等场景。

// 接收函数作为参数
function repeat(n, action) {
for (let i = 0; i < n; i++) {
action(i);
}
}
// 返回函数
function createGreeting(greeting) {
return function(name) {
return `${greeting}, ${name}!`;
};
}
闭包
函数与其词法环境的组合称为闭包。内层函数可访问外层函数的变量,即使外层函数已执行完毕。
function counter() {
let count = 0;
return function() {
count++;
return count;
};
}
const increment = counter();
increment(); // 返回1
立即调用函数表达式(IIFE)
定义后立即执行的函数,用于创建独立作用域,避免变量污染全局。

(function() {
console.log("IIFE executed");
})();
生成器函数(Generator)
通过 function* 定义,可暂停和恢复执行,返回一个迭代器对象。
function* idGenerator() {
let id = 1;
while (true) {
yield id++;
}
}
const gen = idGenerator();
gen.next().value; // 1
异步函数(Async/Await)
使用 async/await 简化异步操作,基于Promise实现。
async function fetchData(url) {
const response = await fetch(url);
return response.json();
}
方法绑定(this上下文)
通过 bind、call 或 apply 显式绑定 this,箭头函数则继承外层 this。
const person = {
name: "Alice",
greet: function() {
console.log(`Hi, ${this.name}`);
}
};
setTimeout(person.greet.bind(person), 1000);






