JS 高级教程学习笔记
1. 闭包
1.1 什么是闭包?
闭包指的是在函数内部定义的函数,并且该内部函数可以访问到外部函数的变量和参数,即使外部函数已经执行完毕并返回了,内部函数依然可以访问这些变量。
1.2 闭包的作用
闭包可以用于创建私有变量和方法,以及实现柯里化等高级功能。
1.3 闭包的实例
javascriptCopy Codefunction createCounter() {
let count = 0;
return function() {
count++;
console.log(count);
};
}
const counter1 = createCounter();
counter1(); // 输出 1
counter1(); // 输出 2
const counter2 = createCounter();
counter2(); // 输出 1
在上述代码中,我们定义了一个 createCounter
函数,它返回一个内部函数,该函数可以访问 createCounter
中的局部变量 count
。通过多次调用 createCounter
返回的内部函数,我们就创建了多个计数器,它们互不干扰,并且每个计数器都可以独立地进行计数。
2. Promise
2.1 什么是 Promise?
Promise 是一种用于处理异步操作的对象,它可以将异步操作转化为同步操作的形式,从而更加方便地管理异步代码流程。
2.2 Promise 的状态
Promise 有三种状态:pending
(进行中)、fulfilled
(已成功)和 rejected
(已失败)。只有在 pending
状态时才可以转化为 fulfilled
或 rejected
状态,一旦状态发生转化,就不能再次改变。
2.3 Promise 的实例
javascriptCopy Codefunction getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = Math.random();
if (data > 0.5) {
resolve(data);
} else {
reject(new Error('Data too small'));
}
}, 1000);
});
}
getData()
.then(data => console.log(`Data generated: ${data}`))
.catch(error => console.error(error));
在上述代码中,我们定义了一个 getData
函数,它返回一个 Promise 对象。当异步操作完成后,我们可以根据操作的结果调用 resolve
或 reject
方法来更新 Promise 的状态。通过使用 then
和 catch
方法,我们可以处理异步操作成功或失败时返回的结果,并且链式调用多个 Promise 对象形成 Promise 链。