闭包是js面试中常问的问题,这篇文章希望能给大家帮助
闭包(Closures)
介绍
闭包是一种在 JavaScript 中常见的概念。它允许函数访问其词法作用域外部的变量,并在函数的生命周期内保持对这些变量的引用。通过闭包,我们可以创建具有持久性状态的函数。
示例代码
// 定义一个外部函数
function outerFunction() {
var outerVariable = 'I am outside!';
// 定义内部函数(闭包)
function innerFunction() {
var innerVariable = 'I am inside!';
console.log(outerVariable); // 访问外部变量
console.log(innerVariable); // 访问内部变量
}
// 返回内部函数
return innerFunction;
}
// 创建闭包函数实例
var closure = outerFunction();
// 调用闭包函数
closure();
代码解释
- 定义了一个外部函数
outerFunction()
,它包含一个名为outerVariable
的局部变量。 - 在
outerFunction()
内部定义了一个名为innerFunction()
的内部函数,它包含一个名为innerVariable
的局部变量。 innerFunction()
作为闭包函数被返回给外部调用者。- 创建了一个闭包函数实例
closure
,它实际上是innerFunction
的一个引用,并且包含了outerFunction
的词法作用域。 - 调用
closure()
,它会输出外部变量outerVariable
和内部变量innerVariable
的值。
闭包的作用
- 保护变量:闭包可以隐藏变量,使其在函数外部不可访问,但在函数内部仍然可用。
- 保存状态:闭包可以创建一个持久性状态,使函数在每次调用时都能记住之前的状态。
- 实现私有成员:通过闭包,可以模拟实现私有变量和方法的概念。
- 简洁来说就是,为了实现局部变量的共享性和持久化,同时避免对全局变量的污染。