function xx() {
var a = 3;
setTimeout(function(){
console.log(a);
delete a; // 需要手动删除吗?
}, 1000);
}
一般有什么更好的写法??
function xx() {
var a = 3;
setTimeout(function(){
console.log(a);
delete a; // 需要手动删除吗?
}, 1000);
}
一般有什么更好的写法??
这个setTimeout的时候因为引用了上层作用域中的变量a,此时形成一个闭包,setTimeout中的function保持了一个对a的引用,但是当这个回调执行完的时候,a的引用也没了,此时垃圾回收器会自动讲a回收,不需要手动删除
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
首先 function xx() {
}
函数xx 当执行到 setTimeout回调函数时, 这里 形成了 一个 1000ms 的闭包, 在这1000ms内 a 是不会被消除的,但setTimeout回调函数执行完毕后, 回调函数将被 回收机制 清除,这时 变量 a 不再有引用标记, a 同样在下一次的 垃圾回收中被 清除