MST
星途 面试题库

面试题:JavaScript中函数作为命名空间优化策略之模块封装

请说明如何利用JavaScript函数作为命名空间来封装模块,避免全局变量污染。请给出一段简单示例代码,实现一个包含加法和减法的数学模块,该模块通过函数作为命名空间封装,外部只能通过特定接口访问模块内的方法。
12.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

在JavaScript中,可以通过立即调用函数表达式(IIFE)来创建一个函数作用域作为命名空间,从而封装模块并避免全局变量污染。以下是实现包含加法和减法的数学模块的示例代码:

// 创建一个立即调用函数表达式(IIFE),返回一个包含公开方法的对象
const mathModule = (function () {
    // 私有变量,外部无法直接访问
    let privateValue = 0;

    // 加法函数
    function add(a, b) {
        return a + b;
    }

    // 减法函数
    function subtract(a, b) {
        return a - b;
    }

    // 返回公开接口
    return {
        add: add,
        subtract: subtract
    };
})();

// 外部通过公开接口调用模块内的方法
console.log(mathModule.add(5, 3)); // 输出 8
console.log(mathModule.subtract(5, 3)); // 输出 2

在上述代码中:

  1. 通过(function () { /*... */ })()创建了一个IIFE,它会立即执行,并且其内部作用域不会污染全局作用域。
  2. 在IIFE内部定义了privateValueaddsubtractprivateValue作为私有变量,外部无法直接访问。
  3. IIFE返回一个对象,该对象包含addsubtract两个公开方法,外部通过mathModule对象来访问这些公开方法。