面试题答案
一键面试闭包场景中JavaScript函数定义表达式的作用
在JavaScript中,函数定义表达式可以在闭包场景中创建一个独立的作用域环境。通过在一个函数内部定义另一个函数,并返回内部函数,外部函数的变量作用域会被保留,即使外部函数已经执行完毕。这使得内部函数可以访问并操作外部函数作用域中的变量,实现数据的私有性和状态的保持。
代码示例
function outer() {
let privateData = 0;
function inner() {
privateData++;
return privateData;
}
return inner;
}
const counter = outer();
console.log(counter());
console.log(counter());
代码工作原理解释
- 创建闭包:
outer
函数内部定义了inner
函数,inner
函数形成了对outer
函数作用域的闭包。 - 数据私有性:
privateData
变量定义在outer
函数内部,外部无法直接访问,只有inner
函数(通过闭包)可以访问和修改它,实现了数据的私有性。 - 状态保持:每次调用
counter
(即inner
函数)时,privateData
的值都会被保留并递增。因为闭包会记住outer
函数调用时的状态,所以privateData
的值不会在outer
函数执行结束后被销毁。每次调用counter
,都会基于上一次privateData
的状态进行操作。