看面试题时,发现了一道较为经典的面试题,代码如下 for(var i=1;i<=3;i++){ setTimeout(function(){ console.log(i); },0); }; //答案:4 4 4. 很多初学者,可能会以为答案会是:1 2 3,但仔细研究,你会发现这道题涉及了异步.作用域.闭包.由于网上有很多类似的内容,故我这里就不再赘述,附上链接如下: https://www.cnblogs.com/destinyruru/p/5823760.html https://www.…
for(var i=0;i<=3;i++){ setTimeout(function() {  console.log(i)  }, 10);} 答案:打印4次4 这道题涉及了异步.作用域.闭包 settimeout是异步执行,10ms后往任务队列里面添加一个任务,只有主线上的全部执行完,才会执行任务队列里的任务,当主线执行完成后,i是4,所以此时再去执行任务队列里的任务时,i全部是4了.对于打印4次是:  每一次for循环的时候,settimeout都执行一次,但是里面的函数没有被执行,而是被…
for(var i=0;i<10;i++){ setTimeout(function(){ console.log(i)//10个10 },1000) } 遇到这种问题 如何用解决呢 for(var i=0;i<10;i++){ ((j)=>{ setTimeout(function(){ console.log(j)//1-10 },1000) })(i) } 原理是 声明了10个自执行函数,保存当时的值到内部…
涉及异步.作用域.闭包 1.settimeout是异步执行,100ms后往任务队列里面添加一个任务 2.let不仅将i绑定到for循环块中,事实上它将其重新绑定到循环体的每一次迭代中 3.闭包 setTimeout是一次执行函数,这里是100ms后执行,仅仅执行一次:for(var i=0;i<=3;i++),i的每次取值都是执行setTimeout这个函数,并没有执行setTimeout里面的function(即闭包函数),setTimeout里面的function是有setTimeout的定…
var a = {m:1}; var b = a; a.n = b ={n:1}; console.log(a); console.log(b); 确定b为{n:1},所以a为 {m:1,n:{n:1}}吗?为什么? 问前辈得到的答案:刚开始a对象有一个属性m,等于1,后面的赋值语句给它增加了一个属性n,n是一个对象,这个对象里有一个属性n,等于1,就是这样解释的…
javascript是单线程执行的,当某一段代码正在执行的时候,所有的后续任务都必须等待,形成一个队列, 一旦当前任务执行完毕,再从队列中取出下一个任务.这常被称为”阻塞式执行“. 如果代码中设定一个setTimeout,那么浏览器就会在合适的时候,将代码插入到队列中,如果这个时间设为0, 就代表立即插入到队列中,但是不会立即执行,仍然会等待前面的代码执行完毕.所以setTimeout并不能保证 执行的时间,是否及时执行取决予Javascript线程是拥挤还是空闲. 例如,下面的代码输出为5,5…
一道经典面试题-----setTimeout(function(){},0) 转载: http://www.w3cfuns.com/notes/17398/e8a1ce8f863e8b5abb530069b388a158/page/3.html#tagsbar 先看题: for (var i = 0; i < 3; i++) { setTimeout(function() { console.log(i); }, 0); console.log(i); } 结果是:0 1 2 3 3 3 很多公…
for (var i = 0; i < 3; i++) { setTimeout(function() { console.log(i); }, 0); console.log(i); } 结果是: 0 1 2 3 3 3 分析: 1.在实践中,setTimeout 会在其完成当前任何延迟事件的事件处理器的执行,以及完成文档当前状态更新后,告诉浏览器去启用 setTimeout 内注册的函数. 2.setTimeout是异步的.正确的理解setTimeout的方式(注册事件): 有两个参数,第一…
起因源于一道前端笔试题: var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function(){console.log(fuc[i])},0); console.log(fuc[i]); } 问:控制台会如何打印? chrome打印结果如下: 虽然setTimeout函数在每次循环的开始就调用了,但是却被放到循环结束才执行,循环结束,i=3,接连打印了3次3. 这里涉及到javascript单线程执行的问题:javascript在浏览器中是单线程…
what's the print number means after called the setTimeout function in Chrome console? javascript function return value / js 函数返回值 timeoutID const log = console.log; // undefined setTimeout(() => log(`zero`), 0); // 3194 // zero setTimeout(() => log(…