看看you don`t know js里面有个闭包问题没理解
代码
function wait(msg) {
setTimeout(function timer() {console.log(msg)}, 1000)
}
wait();
由于setTimeout实在全局执行,而timer作为参数传递出其声明的作用域,引用了msg并在外作用域执行,所有构成了闭包,这里是明白的。但是书中有这样一句话,没懂。
wait(...)在执行1000毫秒后,他的并不作用域并不会消失,timer函数依然保有wait()作用域的闭包
为什么1000毫秒后,timer已经执行完毕了,还说保有该闭包呢,此时不应销毁了吗?
晓得它是什么意思了: 它说的1000ms意思是主要只是timer刚开始执行,我意会成了1000ms后包括了1000ms~∞ms了
8 回复
1000毫秒后 timer 才开始执行而不是执行完毕,所以作用域不会被销毁的。 这里就是想告诉你此时 timer 还能取到外层作用域的变量 msg,这在 javascript 里是很自然的,而某些语言里你需要特别声明才能做到。