面试题答案
一键面试1. 闭包中函数属性的作用域和生命周期影响
- 作用域:在闭包中,函数属性的作用域取决于函数定义的位置。如果在闭包内部定义的函数属性,它可以访问闭包的词法环境,包括外部函数的变量。即使外部函数执行完毕,闭包所引用的变量依然存活,因为闭包持有对它们的引用。
- 生命周期:闭包中的函数属性生命周期与其所在闭包的生命周期相关。只要闭包存在(即有对闭包函数的引用),闭包内部的函数属性以及它所引用的外部变量都不会被垃圾回收机制回收。
2. 举例说明合理管理函数属性确保数据交互和状态维护
在模块模式中利用函数属性缓存数据:
// 模块模式
const myModule = (function () {
// 私有变量
let cache = {};
function getData(key) {
if (!cache[key]) {
// 假设这里是实际获取数据的逻辑,比如从 API 获取
cache[key] = `Data for ${key}`;
}
return cache[key];
}
return {
getData: getData
};
})();
// 使用模块
console.log(myModule.getData('test')); // 第一次调用,获取并缓存数据
console.log(myModule.getData('test')); // 第二次调用,直接从缓存获取数据
在上述代码中,cache
作为函数 getData
所在闭包内的一个“函数属性”(虽然它不是传统意义上的函数的直接属性,但在闭包环境中有类似效果),实现了数据的缓存。getData
函数可以访问并修改 cache
,即使 myModule
外部无法直接访问 cache
,也能通过 getData
函数合理地交互数据,维护数据状态。