问个超级小白的问题。
发布于 5 个月前 作者 beiyio 725 次浏览 来自 问答

/** 测试1*/ function test(aNu){ setTimeout(function(){ console.log(aNu) },1000*10) }

for (var index = 0; index < 10; index++) { test(index); }

最后输出的 结果是0-9 在第一次setTimeout等待执行的时候,外面的index应该等于9了。里面应该输出9次9才对-。-可是为啥是0-9呢~

5 回复

setTimeout访问到的aNu都是外层函数的aNu而不是for里面的index,当然不会是9啊

for循环执行了test(aNu),index就改变了。加入事件循环队列的是setTimeout,加入时拿到的值是0-9,

你使用的是函数参数而不是闭包

也可以认为每次调用 test() 时,在 setTimeout 周围生成了一个独立的闭包,这个独立的闭包保存了 “当时的aNu值”

回到顶部