问个超级小白的问题。
/** 测试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值”