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

js 怎样理解这个问题? 闭包?模块? 从作用域上怎样理解?

js 怎样理解这个问题? 闭包?模块? 从作用域上怎样理解?

汪汪一只猫 2019-05-25 14:31:35
这个问题通过几位朋友的回答,我已经理解了很多,而更深的知识,我想也不是几句话就能说清的(比如IIEF、单列之类的),这需要我自己去寻找相关的知识点,加深理解。最后,我会采纳“依云”的答案,毕竟他是第一个回答了这个问题的朋友,而且言之有物,所有对于另外几位朋友,我只能说声抱歉了。答案只能采纳一个,但心里的感谢是可以分为几份的。在此,真挚的感谢这几位朋友,你们的回答,对我很有帮助。这是问题:前两个输出和后两个为什么不一样?如果可以从对象、自执行、闭包、垃圾回收(也许是与这有关)等方面或者你觉得有关的方面加以解释,本人万分感激。varmyTest=(function(){varstringA="A";varstringB="B";functionsetAB(){stringA="nowisa";stringB="nowisb";}functiongetAB(){return{"stringA":stringA,"stringB":stringB};}return{"setAB":setAB,"getAB":getAB,"stringA":stringA,"stringB":stringB};})();myTest.setAB();varstringAB=myTest.getAB();console.log(myTest.stringA);//Aconsole.log(myTest.stringB);//Bconsole.log(stringAB.stringA);//nowisaconsole.log(stringAB.stringB);//nowisb
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

myTest被赋值为IIFE返回的对象,并且后面的操作并没有重写该对象。
myTest={
setAB:setAB,
getAB:getAB,
stringA:"A",
stringB:"B"
}
所以myTest.stringA返回的就是"A",myTest.stringB返回的就是"B"。
stringAB被赋值为getAB返回的对象(但是在这之前执行了setAB,改变了作用域内的stringA、stringB)。
stringAB={
stringA:"nowisa",
stringB:"nowisb"
}
所以stringAB.stringA返回的就是"nowisa",stringAB.stringB返回的就是"nowisb"。
                            
查看完整回答
反对 回复 2019-05-25
  • 1 回答
  • 0 关注
  • 383 浏览
慕课专栏
更多

添加回答

举报

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