面试题-闭包面试题

1:以下代码的执行结果是?如何处理?
var arr = [];
for(var i = 0;i<10;i++){
   arr.push(function () {
       console.log(i);
   })
}
arr[6]();
//-----控制台输出-------
10
/*
解释:for实现的就是往arr数组里添加函数,函数内部打印i,
函数内容打印的i是闭包内的变量,访问的i是类似于全局变量 ,
访问的时候for循环已经走完,最后i的值是10,所以,arr数组中
存放的都是函数log(10);
*/2:以下代码的执行结果
function fun(n,o){
    console.log(o);
    return {
        fun:function(m){
            return fun(m,n);
        }
    };
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
//-----控制台输出-------
undefined
0
0
0
/*
解释:第一次调用fun(n,0),给n传值为0,o没有传值,所以打印o是undefined,
并且把返回的结果赋值给a,a.fun(1),调用fun:把1传给m,然后调用外面的fun()
,并把m,n传过去,也就是把m=1,n=0(n=0是因为第一次赋值,后面调用了外面的n,
类似于全局变量,n一直是0)传给n,o,然后log(o),所以打印的是0
*/3:以下代码的执行结果
for(var i = 0;i<5;i++){
    setTimeout(function () {
        console.log(i, new Date());
    },1000);
}
console.log(i, new Date());
//-----控制台输出-------
5 Fri Jul 17 2020 11:16:27 GMT+0800 (中国标准时间)
5 Fri Jul 17 2020 11:16:28 GMT+0800 (中国标准时间)
5 Fri Jul 17 2020 11:16:28 GMT+0800 (中国标准时间)
5 Fri Jul 17 2020 11:16:28 GMT+0800 (中国标准时间)
5 Fri Jul 17 2020 11:16:28 GMT+0800 (中国标准时间)
5 Fri Jul 17 2020 11:16:28 GMT+0800 (中国标准时间)
/*
涉及同步,异步问题,for循环是同步,比定时器先执行,所以打印的i都是5,
第一次先打印当前时间,过一秒后定时器执行5次,所以输出结果如上所示
*/

往期精彩文章

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个爱编程的男孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值