javascript - js的setTimeout需要手动删除外部变量吗
PHP中文网
PHP中文网 2017-04-11 13:05:22
[JavaScript讨论组]
function xx() {
    var a = 3;
    setTimeout(function(){
        console.log(a);
        delete a; // 需要手动删除吗?
    }, 1000);
}

一般有什么更好的写法??

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
PHP中文网

执行完就被销毁了

伊谢尔伦

不需要,执行完function(){console.log(a);}就销毁了

阿神

不需要删除,它只执行一次就删除啦

PHP中文网

这个setTimeout的时候因为引用了上层作用域中的变量a,此时形成一个闭包,setTimeout中的function保持了一个对a的引用,但是当这个回调执行完的时候,a的引用也没了,此时垃圾回收器会自动讲a回收,不需要手动删除

高洛峰

而且 delete 操作符只能删除属性不能删除变量哦

高洛峰

首先 function xx() {

var a = 3;
setTimeout(function(){
    console.log(a);
    delete a; // 需要手动删除吗?
}, 1000);

}

函数xx 当执行到 setTimeout回调函数时, 这里 形成了 一个 1000ms 的闭包, 在这1000ms内 a 是不会被消除的,但setTimeout回调函数执行完毕后, 回调函数将被 回收机制 清除,这时 变量 a 不再有引用标记, a 同样在下一次的 垃圾回收中被 清除

迷茫

执行完就被销毁了

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

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