实用主义:面试中的日常闭包

作者: Mr_Treasure | 来源:发表于2017-02-21 20:36 被阅读95次

题目

for (var i = 0;i < 100;i++) {
  setTimeout(() => {
     console.log(i);
  }, 0);
}

求输出结果。
答案是:100,100,100,100·······
这道题就是涉及到了变量的作用域。因为ES5没有块级作用域,因此for循环中使用var声明的变量i是全局变量,而setTimeout()是一个异步函数,在这里表示在0s后,将console.log(i)加入事件池。然而for中的循环是同步的,因此,同步执行for中的循环,此时i已经变为了100,然后console.log(i)就是100了

改进方法

  1. 运用闭包
for (var i =0;i < 100;i++) {
    (function(i) {
      setTimeout(() => {
        console.log(i);    
      }, 0);
    })()
}

通过闭包保存i当时的值。

  1. ES6方法
for (let i = 0;i < 100;i++) {
    setTimeout(() => {
      console.log(i);
    }, 0);
}

通过let声明的变量有了块级作用域,因此,console.log中的i值是当时for循环中的i。ES6也推荐使用let声明变量,有很多好处(块级作用域、暂时性死区等)

就是这样:)

相关文章

  • 实用主义:面试中的日常闭包

    题目 求输出结果。答案是:100,100,100,100·······这道题就是涉及到了变量的作用域。因为ES5没...

  • 闭包1(基础)

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

  • js闭包问题

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

  • JavaScript闭包

    前言 在面试过程中,闭包是常考的问题,在很多框架和库中也使用到了闭包,包括我们在平时写代码也或多或少使用到了闭包。...

  • iOS中block和swift 的闭包的用法探究

    面试 (参考答案在文章中,也在底部) block的内部原理?swift中闭包表达式的种类?闭包和block相比有哪...

  • 关于闭包 vue3 防抖 节流

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

  • 什么是闭包?以及对闭包缺点详解

    在前端面试中,很多面试管都会问到得概念‘介绍一下闭包’我们一般从以下三方面来回答:1.闭包是什么,2.闭包优点,3...

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

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

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

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

  • JavaScript之闭包

    闭包 MDN面试官问我什么是闭包该如何回答廖雪峰博客-闭包阮一峰博客-闭包 个人理解 内部函数可以访问外部函数的作...

网友评论

    本文标题:实用主义:面试中的日常闭包

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