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时函数是怎么执行的 展开
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时函数是怎么执行的 展开
1个回答
展开全部
首先不是“在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毫秒数之后,将函数添加到执行队列当中”
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询