扫码关注官方订阅号
function xx() { var a = 3; setTimeout(function(){ console.log(a); delete a; // 需要手动删除吗? }, 1000); }
一般有什么更好的写法??
认证高级PHP讲师
执行完就被销毁了
不需要,执行完function(){console.log(a);}就销毁了
不需要删除,它只执行一次就删除啦
这个setTimeout的时候因为引用了上层作用域中的变量a,此时形成一个闭包,setTimeout中的function保持了一个对a的引用,但是当这个回调执行完的时候,a的引用也没了,此时垃圾回收器会自动讲a回收,不需要手动删除
而且 delete 操作符只能删除属性不能删除变量哦
delete
首先 function xx() {
var a = 3; setTimeout(function(){ console.log(a); delete a; // 需要手动删除吗? }, 1000);
}
函数xx 当执行到 setTimeout回调函数时, 这里 形成了 一个 1000ms 的闭包, 在这1000ms内 a 是不会被消除的,但setTimeout回调函数执行完毕后, 回调函数将被 回收机制 清除,这时 变量 a 不再有引用标记, a 同样在下一次的 垃圾回收中被 清除
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
执行完就被销毁了
不需要,执行完function(){console.log(a);}就销毁了
不需要删除,它只执行一次就删除啦
这个setTimeout的时候因为引用了上层作用域中的变量a,此时形成一个闭包,setTimeout中的function保持了一个对a的引用,但是当这个回调执行完的时候,a的引用也没了,此时垃圾回收器会自动讲a回收,不需要手动删除
而且
delete操作符只能删除属性不能删除变量哦首先 function xx() {
}
函数xx 当执行到 setTimeout回调函数时, 这里 形成了 一个 1000ms 的闭包, 在这1000ms内 a 是不会被消除的,但setTimeout回调函数执行完毕后, 回调函数将被 回收机制 清除,这时 变量 a 不再有引用标记, a 同样在下一次的 垃圾回收中被 清除
执行完就被销毁了