CNode

问个超级小白的问题。

问答
Bbeiyio发布于9 年前最后回复9 年前5 回复4388 浏览0 收藏

/** 测试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)

F
FlyerJay#1·9 年前

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

1
18820227745#2·9 年前

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

C
coordcn#3·9 年前

传值

S
Soontao#4·9 年前

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

M
myy#5·9 年前

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

参与回复
登录后即可参与回复。登录