MST

星途 面试题库

面试题:JavaScript 中闭包的基本原理及简单应用

请解释 JavaScript 闭包的原理,并通过代码示例展示如何使用闭包来实现数据的封装和私有变量。
47.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

JavaScript闭包原理

闭包是指有权访问另一个函数作用域中的变量的函数。在JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。闭包的原理基于JavaScript的词法作用域,函数在定义时会记住其周围的词法环境。即使外部函数执行完毕并返回,内部函数依然可以访问外部函数作用域中的变量,因为内部函数引用了外部函数的作用域,使得该作用域不会被垃圾回收机制回收。

代码示例 - 使用闭包实现数据封装和私有变量

function Person() {
    // 私有变量
    let name = 'John'; 

    // 公有方法,通过闭包访问私有变量
    function getName() {
        return name;
    }

    function setName(newName) {
        name = newName;
    }

    return {
        getName: getName,
        setName: setName
    };
}

// 创建Person实例
let person = Person();
console.log(person.getName()); // 输出: John
person.setName('Jane');
console.log(person.getName()); // 输出: Jane

// 尝试直接访问name变量,会报错,因为name是私有变量
// console.log(person.name); 

在上述代码中,Person函数返回一个包含getNamesetName方法的对象。这两个方法可以访问和修改Person函数内部的name变量,而外部代码无法直接访问name变量,实现了数据的封装和私有变量的效果。