面试题答案
一键面试原理
- 限制作用域:闭包可以将相关的变量和函数封装在一个独立的作用域内,使得外部代码无法直接访问内部变量和函数,减少了被恶意修改或注入的风险。
- 依赖控制:通过在闭包内部管理依赖,只暴露必要的接口给外部使用,确保依赖的正确性和安全性。
代码示例
// 模块A
const moduleA = (function () {
// 私有变量
let privateVariable = 'This is a private variable in module A';
// 私有函数
function privateFunction() {
return 'This is a private function in module A';
}
// 暴露给外部的接口
return {
getPrivateVariable: function () {
return privateVariable;
},
callPrivateFunction: function () {
return privateFunction();
}
};
})();
// 模块B,依赖模块A
const moduleB = (function (moduleA) {
// 私有变量
let privateVariableB = 'This is a private variable in module B';
// 依赖模块A的函数
function useModuleA() {
return `Module A variable: ${moduleA.getPrivateVariable()}, Module A function result: ${moduleA.callPrivateFunction()}`;
}
// 暴露给外部的接口
return {
useModuleA: useModuleA
};
})(moduleA);
// 测试
console.log(moduleB.useModuleA());
在上述代码中:
- 模块A 通过闭包封装了私有变量和函数,只暴露了
getPrivateVariable
和callPrivateFunction
两个接口。这样外部代码无法直接修改privateVariable
或privateFunction
,降低了恶意代码注入修改的风险。 - 模块B 在其闭包的参数中接收模块A,通过这种显式的依赖传递,确保模块B使用的模块A是经过预期定义的,避免了引入恶意伪造的模块A导致安全漏洞。同时模块B也通过闭包封装了自己的私有变量和函数,进一步增强安全性。