原函数
let timer = null
function foo(obj) {
window.clearTimeout(timer)
// do sth.
timer = window.setTimeout(function(){
foo(obj)
},100) // 每次执行形成匿名作用域,引用了当前作用域的变量,形成了闭包,当前作用域无法销毁
}
由于形成了闭包,首次执行foo函数是的作用域在后续递归中无法销毁父级作用域,导致嵌套作用域都不能被销毁
注意:以下情况不会发生,因为没有用到上级作用域的引用值
let timer = null
function foo(obj) {
window.clearTimeout(timer)
// do sth.
timer = window.setTimeout(foo,100) // 每次执行形成匿名作用域,但是会销毁当前作用域
}
优化:
let timer = null
function foo(obj) {
_foo()
function _foo() {
window.clearTimeout(timer)
// do sth.
}
timer = window.setTimeout(_foo,100) // 每次执行形成匿名作用域,但是会销毁当前作用域
}