function test(){
let name = 'init';
function getName(){
return name;
}
function setName(newName){
name = newName;
}
return {
getName:getName,
setName:setName,
name:name
}
}
let t1 = test();
t1.setName('liujiapeng')
console.log(t1.getName()) //liujiapeng
console.log(t1.name); //init
为什么t1.name不能打印出修改后的值呢,我的理解是因为有闭包,因此t1创建的test上下文没有弹出,get和set函数中的name都是该上下文中的name。那为啥直接把name返回出去获取不到最新的值咧。
小白上路,望大神指导~
去查(对象)值的引用和(简单)值的复制。
return 出去 name 的不是闭包里的那个 name,是它的 copy。