javascript函数的问题

functionfunc(){for(vari=0;i<3;i++){functioninner(){console.log(i);}setInterval(inner,... function func() {
for(var i=0;i<3;i++){
function inner() {
console.log(i);
}
setInterval(inner, 1000);
}
}
输出的是1秒3个3
有一个疑问就是 当在for循环中 i 是取不到值得吗? 只有在循环结束后 i=3,i才被赋值? 在i=0,1时函数是怎么执行的
展开
 我来答
码匠
2017-12-17 · 原创桌游与酷玩,为你带去更多欢乐
码匠
采纳数:625 获赞数:4623

向TA提问 私信TA
展开全部

首先不是“在for循环中 i 是取不到值得吗? 只有在循环结束后 i=3,i才被赋值”

而是“在for循环当中,i会变化,但是inner函数当中的i值并没有被立即调用”

这个和js的执行顺序有关系,i值会在for循环执行的时候不断变化,当调用计时器的时候,i值已经是3了

这个是典型的闭包问题,涉及到作用域的相关知识(在函数inner当中并没有i这个变量,变量是位于func这个函数当中的,此时,在调用inner的时候,要寻找i这个变量存储空间,找不到所以向父级查找,父级func当中有i,由于for循环已经执行完毕,i值已经被设置成了3,所以~自然是打出3的),建议你先了解一下作用域,另外也了解一下计时器,关于计时器的类似的一道题->JavaScript计时器

更多追问追答
追问
三个题看了下差不多理解了
计时器函数是在最后才调用对吧
追答
计时器是“在x毫秒数之后,将函数添加到执行队列当中”
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式