面试题答案
一键面试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
函数返回一个包含getName
和setName
方法的对象。这两个方法可以访问和修改Person
函数内部的name
变量,而外部代码无法直接访问name
变量,实现了数据的封装和私有变量的效果。