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

这个问题通过几位朋友的回答,我已经理解了很多,而更深的知识,我想也不是几句话就能说清的(比如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);//A
console.log(myTest.stringB);//B
console.log(stringAB.stringA);//nowisa
console.log(stringAB.stringB);//nowisb
汪汪一只猫
浏览 384回答 1
1回答

ABOUTYOU

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"。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript