- 67
- 0
对于闭包、return 还有些疑问:
let v=[];
function temp() {
let a = [],b=0;
return a;
}
let t = temp();
最后一行代码执行时,temp 函数内会创建一个作用域链,作用域链中有2个变量对象,全局变量对象G和局部变量对象P,那么上面代码执行完后,我想出三个答案:
理解1:P 没有被销毁,因为 t 保存着对 P 里变量 a 的引用;
理解2:P 已经被销毁了,但 a 没有被销毁,因为 return 返回 a 的引用,然后解除了对 P 的引用;
理解3:P 已经被销毁了,但 a 没有被销毁,因为 return 返回 a 的值,然后解除了对 P 的引用;
我的分析:
理解1的问题在于:这里仅仅是返回一个引用类型的变量,认为是通过变量对象来引用这个变量,从而导致变量对象没有被销毁,如果机制是这样,不是太耗费资源么,直接返回引用然后销毁变量对象就是了;
理解2的问题在于:MDN上看到中英文里解释,return 都是返回的是值,并没有说引用,不过如果返回的是对象,就说是引用的话,那是不是意味着变量对象可能没有被销毁或者在返回后才被销毁了?
我觉得理解3是对的,但不是很确定,请问大家觉得哪个理解是对的?或者上面的理解都不对,有自己的观点?
0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
