经典前端面试题-作用域 闭包 promise实现for循环不同值输出
记录最近学习到的一道经典面试题
1.要求:输出55555原理:JS是单线程,程序在主线程中执行,当遇到setTimeout,将其放入等待队列,等for循环执行完毕后,再将等待队列中的console.log(i)执行
12345for (var i=0;i<5;i++) { setTimeout(function(){ console.log(i) },1000)}
2.要求:输出501234利用自执行/立即执行方式,闭包
原理:i传给了立即执行函数,立即执行函数的参数j是从i传过来的,而立即执行中的函数setTimeout里面的函数参数j是父函数立即执行函数的参数,这样形成一个闭包。
12345678for (var i=0;i<5;i++) { (function(j){ setTimeout(function(){ console.log(j) },1000) })(i)}console.log(i) //这一句是主线程中执行的 所以i是5,先执行
3.要求:输出501234函数方式
...