面试题答案
一键面试以下是使用IIFE(立即执行函数表达式)创建私有变量和特权方法的JavaScript模块示例:
const myModule = (function() {
// 私有变量
let privateVariable = 'This is a private variable';
// 私有函数
function privateFunction() {
console.log('This is a private function');
}
// 特权方法
function publicMethod() {
privateFunction();
console.log(privateVariable);
}
return {
publicMethod: publicMethod
};
})();
// 使用模块
myModule.publicMethod();
闭包如何工作以保护私有变量:
- 作用域链:当
publicMethod
函数被返回并在外部环境调用时,它形成了一个闭包。闭包使得publicMethod
函数能够访问其定义时所在的词法作用域(也就是IIFE内部的作用域)。 - 保护机制:外部代码无法直接访问
privateVariable
和privateFunction
,因为它们存在于IIFE内部的作用域中,外部作用域没有对它们的直接引用。只有通过publicMethod
这个特权方法,才能间接访问到这些私有成员。这是因为publicMethod
在定义时捕获了IIFE内部的作用域,即使IIFE已经执行完毕,该作用域仍然被publicMethod
所引用,从而保证了私有变量和函数的安全性。