javascript - [JS]为什么函数里面 tryCode.test 在函数调用结束之后没有被回收呢?
高洛峰
高洛峰 2017-04-11 09:01:18
[JavaScript讨论组]

来自codewars上的一道题目的答案池里的一个答案,我感到有点疑惑:

为什么里面的 tryCode.test 在函数调用结束之后没有被回收呢?
函数最后return过来的不是只是数据么,这个“变量”(函数的属性?)应该不会给返回的吧。

MaximeDesRoches

function tryCode(indications) {
  if(indications == null) {
    tryCode.test = [5,5,5];1⃣️
    return tryCode.test;
  }
  return tryCode.test = tryCode.test.map(function(c, i){
    if (indications[i] === 0) return c;
    return (indications[i] === 1) ? ++c : --c;
  });
}

(这个函数会被反复调用,一开始是null,之后是数组。)

感觉机制上和闭包有点像,可是感觉不太一样啊。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
阿神

tryCode.test不是闭包,就是简单的在一个Function实例tryCode上动态添加了test属性而已
函数返回时确实返回的是数据,但是这个数据已经赋值给了tryCode.test,而tryCode.test

把问题简化一下:

function tryCode() {
  tryCode.test = [5,5,5];
  return tryCode.test;
}

tryCode();

// 下面这句话后[5,5,5]才可以被回收
tryCode = null; // or, tryCode.test = null


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号