MST

星途 面试题库

面试题:JavaScript IIFE与闭包的结合应用

编写一个使用IIFE创建私有变量和特权方法的JavaScript模块示例,并解释其中闭包是如何工作以保护私有变量的。
47.0万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

以下是使用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();

闭包如何工作以保护私有变量:

  1. 作用域链:当publicMethod函数被返回并在外部环境调用时,它形成了一个闭包。闭包使得publicMethod函数能够访问其定义时所在的词法作用域(也就是IIFE内部的作用域)。
  2. 保护机制:外部代码无法直接访问privateVariableprivateFunction,因为它们存在于IIFE内部的作用域中,外部作用域没有对它们的直接引用。只有通过publicMethod这个特权方法,才能间接访问到这些私有成员。这是因为publicMethod在定义时捕获了IIFE内部的作用域,即使IIFE已经执行完毕,该作用域仍然被publicMethod所引用,从而保证了私有变量和函数的安全性。