所以console.log()是同步任务跟for循环是同步执行的,而setTimeout()是异步任务需要等到主线程的同步任务执行完毕后才能执行,所以结果就是0、1、2、3、4、5、6、7、8、9了。 再来看一段代码: for(var i=0;i<10;i++){ setTimeout("console.log(i)",1000);//连续的10个10 } 啊哈哈,这时候结果就是...
使用let,let是区块变量,只能在大括号内有效,并不会向后传递。 for(leti=0;i<10;i++){setTimeout(()=>{console.log(i);},1000)} 方法二 自执行函数 把当前 for 循环过程中的 i 传递进去,构建出块级作用域 for(vari=0;i<10;i++){(function(i){setTimeout(()=>{console.log(i);},1000)})...
for(var i=0;i<10;i++){ ((j)=>{ setTimeout(function(){ console.log(j)//1-10 },1000) })(i) } 原理是 声明了10个自执行函数,保存当时的值到内部
setTimeout是一次执行函数,这里是1秒后执行,仅仅执行一次;for(var i=0;i<10;i++),i的每次取值都是执行setTimeout这个函数,并没有执行setTimeout里面的function(即闭包函数),setTimeout里面的function是有setTimeout的定时触动的,也就是1秒后执行,也就是说i从0~9时,一共执行了10次的set...
for(var i=0;i<10;i++){ setTimeout((function(i){ return function(){ console.log(i); } })(i),1000);}for(var i=0;i<10;i++){ setTimeout((function(i){ return function(){ console.log(i); } })(i),(function(i){ return i*1000 })(i));} 查看完整描述...
问题出现在作用域上,用为console.log(i);中的i是var 定义的,所以是函数级的作用域.不属于for循环体,for 循环完时候正在执行setTimeout的10个回调函数. 事件机制: js是单线程的,它有一个队列的运行机制,setTimeout会把回调的函数放入事件队列当中排队执行. setTimeout会在延时设定的毫秒之后,啥也不管直接将回...
for(var i=..for(var i=0;i<10;i++){ setTimeout(console.log(i),0);//0、1、2、3、4、5、6、7、8、9 } for(var i=0;i<
setTimeout(function () { // for (var i = 0; i < 10; i++) { // docum...
for(var i = 1; i <= forNum; i++){ var data = { "tableSign":tableSign, "pageNo":i, "pageSize":$(".pageSize").val(), "startDate":$(".startDate").val() }; setTimeout(executeDataCopy(data),5000); } }) function executeDataCopy(data){ $.ajax({ type: "get", url:...
for (var i = 0; i < 4; i++) { setTimeout(function () { console.log(i); }, 1000) } // 输出结果:4444复制代码 1. 2. 3. 4. 5. 6. 原因:setTimeout是宏任务(异步执行),每次 for 循环内创建的setTimeout任务都在队列中排队等候,等待for循环结束才会执行。var定义的变量 i 会暴露到全...