且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

javascript - 有关setTimeout的问题

更新时间:2022-10-15 09:10:26

第一个问题,第一个循环时,是

setTimeout(function(){console.log('a')},1000*1);

这是对setTimeout的一次调用,结果就是把function在1000*1毫秒后扔到任务队列去。
循环第二轮继续,这个时候是在1000*2毫秒后扔到任务队列去,这里的j跟function里用变量j是不一样的,function是后面可以调用时发现自己里面并没有j的声明才去外层作用域找变量j,此时j=10;可每次循环中调用setTimeout其实就是一个function的普通调用过程,正如:

function normal(n){
    console.log(n);
}

for(var i=0;i<10;i++){
    normal(i*1000);
}

这样对比例子,能明白吧?

第二个问题呢,跟上一个问题我觉得是类似的。

setTimeout(console.log(j),1000*j);

正常来说,setTimeout的第一个参数要求是function,当然也可以是别的,具体看 https://developer.mozilla.org...

但这里不涉及到这setTimeout的定义范畴了。

其实换个写法:

function normal(n){
    console.log('i am called');
}

for(var i=0;i<10;i++){
    normal(console.log(i));
}

当在调用normal方法的时候,首先参数里面是一个函数的执行,注意是执行,而不是什么匿名函数的声明之类的。
所以第一步是先执行掉参数里面的'执行函数',得到函数执行的值,然后作为参数传入到方法中去。

这样说,题主能理解不?