js的setTimeout需要手动删除外部变量吗

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

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

阅读 6.9k
7 个回答

首先 function xx() {

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

}

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

执行完就被销毁了

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

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

新手上路,请多包涵

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

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

新手上路,请多包涵

执行完就被销毁了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题