美文网首页
一个小小的面试题 闭包和for中的i

一个小小的面试题 闭包和for中的i

作者: 吴高亮 | 来源:发表于2019-02-17 21:42 被阅读0次

关于

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

原因是这里面的i只有一个;上面代码中,
变量i是var命令声明的,在全局范围内都有效,
所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,
而循环内被赋给数组a的函数内部的console.log(i),
里面的i指向的就是全局的i。也就是说,所有数组a的成员里面的i,
指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10。

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。
利用闭包解决for循环i值得问题

for (var i=1; i<=5; i++) { 
    setTimeout( (function(i) {
        return function() {
            console.log(i);
        }
    })(i), i*1000 );
}

相关文章

  • 【JS】总算能把闭包经典面试题真的讲清楚了

    闭包的经典面试题 说到闭包,那么这个经典的闭包面试题,大家肯定都很熟悉: 这个例子当中为什么i输出的都是5呢?能够...

  • 一个小小的面试题 闭包和for中的i

    关于 原因是这里面的i只有一个;上面代码中,变量i是var命令声明的,在全局范围内都有效,所以全局只有一个变量i。...

  • 关于闭包 vue3 防抖 节流

    闭包好像成了面试题必考,干脆就学一下。我暂时理解的闭包:一个函数中嵌套着另一个函数,这个函数就是闭包。闭包不会内存...

  • 闭包1(基础)

    (什么是闭包?闭包的作用?闭包的缺陷?) (闭包的几种可能的应用场景) (闭包与内存泄漏,有关闭包的面试题) 推荐...

  • js闭包问题

    javascript 闭包的概念,闭包的作用,闭包经典面试题详解(配图解) 函数作用域(闭包前置知识) 要彻底弄懂...

  • Swift学习-闭包&& 懒加载&&am

    闭包 闭包的介绍 闭包和OC中的block非常相似OC中的block是匿名的函数Swift中的闭包是一个特殊的函数...

  • 文摘-20170305

    前端 释义图例详解那道setTimeout与循环闭包的经典面试题js中proto和prototype的区别和关系?...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • 一个关于闭包很小的面试题

    关于闭包一个很小的面试题。 01 背景 在很久以前,面试中问起闭包应用场景的是,如果页面上有 N 个按钮要绑定点击...

  • Swift笔记<二十>闭包

    1.闭包的介绍 闭包和OC中的block非常相似 2.闭包的使用 block的定义属性和方法中带block 闭包=...

网友评论

      本文标题:一个小小的面试题 闭包和for中的i

      本文链接:https://www.haomeiwen.com/subject/vbnweqtx.html