闭包及执行顺序01

闭包
闭包(closure):外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象。即闭包就是能够读取其他函数内部变量的函数。
缺点:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包

例题1

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<10;i++){
setTimeout(function(){ console.log(i);//连续的10个10 },0);
}
for(var i=0;i<10;i++){
setTimeout("console.log(i)",0);//连续的10个10
}
for(var i=0;i<10;i++){
           (function (n){
               setTimeout(function (){
                   console.log(n);          //0~9
               },0)
           })(i)
       }

js单线程
第一个for循环,setTimeout里没有函数,相当于同步执行
第二个for循环,定时器里有函数。相当于一个异步任务,异步任务是只有等执行栈中同步任务执行完毕后才可以执行异步。当for循环同步任务结束后,此时i的值是10。每一次for循环的时候,setTimeout都执行一次,但是里面的函数没有被执行,而是被放到了任务队列里面,等待执行,相当于再执行10次异步。
for循环了4次,就放了4次,当主线程执行完成后,才进入任务队列里面执行。
第三个for循环,console.log加了引号类似于函数的调用,类似于第二个for循环。
第四个for循环,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值