面试题答案
一键面试闭包在定时器中的作用
在JavaScript中,闭包可以让定时器函数访问并保持其外部作用域中的变量状态。由于JavaScript的函数作用域特性,当一个函数定义在另一个函数内部时,内部函数可以访问外部函数的变量。当内部函数作为回调函数传递给定时器(如setTimeout
或setInterval
)时,即使外部函数执行完毕,闭包依然可以保持对外部函数变量的引用,从而使得定时器回调函数能访问和修改这些变量。
示例说明闭包在定时器场景下保存特定变量状态的原理
function outerFunction() {
let count = 0;
function innerFunction() {
count++;
console.log(count);
}
setTimeout(innerFunction, 1000);
return innerFunction;
}
let closure = outerFunction();
// 1秒后,控制台将输出 1
在上述示例中:
outerFunction
定义了一个局部变量count
和一个内部函数innerFunction
。innerFunction
能够访问并修改outerFunction
中的count
变量。setTimeout
将innerFunction
作为回调函数传入,1秒后执行。尽管此时outerFunction
可能已经执行完毕,但由于闭包的存在,innerFunction
依然保持着对count
变量的引用,所以能正确地输出count
自增后的值。