面试题答案
一键面试闭包的解释
在JavaScript中,闭包是指一个函数能够访问并记住其词法作用域,即使该函数在其原始作用域之外被调用。这意味着内部函数可以“关闭”外部函数的作用域,使得外部函数执行完毕后,其作用域内的变量依然能被内部函数访问和操作。
利用闭包实现数据私有和封装的高阶函数示例
function counter() {
let count = 0;
return function() {
return ++count;
};
}
let myCounter = counter();
console.log(myCounter()); // 输出 1
console.log(myCounter()); // 输出 2
工作原理说明
- 函数定义:
counter
是一个高阶函数,它内部定义了一个局部变量count
并初始化为0
,然后返回一个匿名函数。 - 闭包形成:返回的匿名函数记住了它在定义时所处的词法环境,也就是
counter
函数的作用域,包含count
变量。尽管counter
函数已经执行完毕,其作用域按照常理应该被销毁,但由于返回的匿名函数对该作用域的引用,count
变量依然保存在内存中。 - 数据私有和封装:
count
变量只能通过返回的匿名函数来访问和修改,外部代码无法直接访问count
,从而实现了数据的私有和封装。每次调用返回的匿名函数时,它都会访问并修改counter
函数作用域内的count
变量,实现计数功能。