1.4.7 闭包
// 外部函数有个参数 name
const pet = function(name) {
const getName = function() {
return name; // 内部函数可以访问外部函数的变量 name
};
return getName; // 返回内部函数,以此将它暴露给外部作用域(outer scopes)
};
const myPet = pet("Vivie");
myPet(); // 返回 "Vivie"// 外部函数的变量一:函数参数 name
const createPet = function(name) {
let sex; // 外部函数的变量二:声明的变量 sex
// 以下内部函数来操作和访问这两变量
const pet = {
setName(newName) {
name = newName;
},
getName() {
return name;
},
getSex() {
return sex;
},
setSex(newSex) {
if (
typeof newSex === "string" &&
(newSex.toLowerCase() === "male" || newSex.toLowerCase() === "female")
) {
sex = newSex;
}
}
};
return pet; // 返回一个对象,包含一系列内部函数(也能将它们暴露给外部作用域)
};
const pet = createPet("Vivie");
pet.getName(); // Vivie
pet.setName("Oliver");
pet.setSex("male");
pet.getSex(); // male
pet.getName(); // OliverLast updated