为了账号安全,请及时绑定邮箱和手机立即绑定

萌新!关于闭包的问题

萌新!关于闭包的问题

撒科打诨 2019-10-18 09:03:40
functiontest(){letname='init';functiongetName(){returnname;}functionsetName(newName){name=newName;}return{getName:getName,setName:setName,name:name}}lett1=test();t1.setName('liujiapeng')console.log(t1.getName())//liujiapengconsole.log(t1.name);//init为什么t1.name不能打印出修改后的值呢,我的理解是因为有闭包,因此t1创建的test上下文没有弹出,get和set函数中的name都是该上下文中的name。那为啥直接把name返回出去获取不到最新的值咧。小白上路,望大神指导~
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

functiontest(){
letobj={
name:'init'
}
functiongetName(){
returnobj.name;
}
functionsetName(newName){
obj.name=newName;
}
return{
getName:getName,
setName:setName,
obj:obj
}
}
lett1=test();
t1.setName('liujiapeng')
console.log(t1.getName())//liujiapeng
console.log(t1.obj.name);//liujiapeng
去查(对象)值的引用和(简单)值的复制。return出去name的不是闭包里的那个name,是它的copy。
                            
查看完整回答
反对 回复 2019-10-18
?
倚天杖

TA贡献1828条经验 获得超3个赞

闭包是一个函数,它hold住了外层函数作用域的变量。这样只要你引用了这个函数,那他hold的变量就会延迟释放。
你这返回的是个对象,不能算闭包。
                            
查看完整回答
反对 回复 2019-10-18
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信