在JavaScript中,函数是一等公民,这意味着函数可以作为参数传递给其他函数,也可以作为其他函数的返回值。当我们将一个函数作为参数传递给另一个函数时,这通常被称为高阶函数。
高阶函数:接受至少一个函数作为参数,或者返回一个函数的函数。
map
, filter
, reduce
等,它们都接受一个函数作为参数来处理数组元素。setTimeout
, Promise
等,它们使用回调函数来处理异步操作的结果。function greet(name, callback) {
console.log('Hello, ' + name);
callback();
}
greet('World', function() {
console.log('Greeting completed!');
});
function multiply(x, y) {
return x * y;
}
const double = multiply.bind(null, 2);
console.log(double(5)); // 输出: 10
function curry(fn) {
const args = Array.prototype.slice.call(arguments, 1);
return function() {
const innerArgs = Array.prototype.slice.call(arguments);
const finalArgs = args.concat(innerArgs);
return fn.apply(null, finalArgs);
};
}
function add(a, b) {
return a + b;
}
const curriedAdd = curry(add, 5);
console.log(curriedAdd(3)); // 输出: 8
问题:回调地狱(Callback Hell)
当多个回调函数嵌套在一起时,代码会变得难以阅读和维护。
解决方法:
function asyncOperation() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve('Success!'), 1000);
});
}
asyncOperation()
.then(result => {
console.log(result);
return 'Next step';
})
.then(nextResult => {
console.log(nextResult);
});
async function run() {
const result = await asyncOperation();
console.log(result);
const nextResult = 'Next step';
console.log(nextResult);
}
run();
通过使用Promise或async/await,可以显著提高异步代码的可读性和可维护性。
领取专属 10元无门槛券
手把手带您无忧上云