JavaScript 闭包
闭包是 JavaScript 中最强大的特性之一。JavaScript 允许函数嵌套,并且内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。
但是,外部函数却不能够访问定义在内部函数中的变量和函数。这给内部函数的变量提供了一定的安全性。
此外,由于内部函数可以访问外部函数的作用域,因此当内部函数生存周期大于外部函数时,外部函数中定义的变量和函数的生存周期将比内部函数执行时间长。当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。
闭包可以被理解为这样的场景:
- 你参加了一场面试。
- 在面试过程中,面试官会向你提出一些问题,这些问题中既有外部的内容(例如,“讲讲闭包”),也有在面试过程中产生的内容(例如,“你可以讲个例子吗?”)。
- 面试结束后,面试官将对你的评价交给人事部门。
对于没有参与面试的其他人事部门成员来说,他们不知道你和面试官在面试中讨论了什么内容,但他们可以根据面试官的评价来决定你的后续安排。
面试(高阶函数):面试就像一个高阶函数,它有外部的背景(问题和环境),同时会产生一些内部的信息(你在面试中给出的回答和例子)。这些信息最终会成为面试后的评价(闭包)。
面试官的评价(闭包函数):面试结束后,面试官的评价就像一个闭包函数,它能够记住面试中讨论过的问题和回答(即使面试已经结束),并将这些评价交给人事部门。
面试的内容(外部作用域):在面试中,面试官的问题和你给出的答案相当于外部作用域中的变量。即使面试结束,这些内容依然会通过闭包被保存。
function interview() {
let question = '讲讲闭包'; // 外部的内容:问题
let example = '以我们当前进行的这场面试为例子'; // 在面试中产生的内容:例子
return function evaluation() {
console.log(`问题: ${question}`); // 闭包函数:能够访问外部内容
console.log(`答案: ${example}`);
};
}
const interviewFeedback = interview(); // 参加面试并得到反馈
interviewFeedback(); // 输出面试中的内容: 问题和答案
JavaScript 闭包
http://localhost:8080/archives/javascript-bi-bao