js闭包问题详解

传言很多互联网公司不是停止招聘就是裁员的,相比春节后肯定有很多前端程序员需要找工作,于是就免不了面试了,本人就分享一道特别常考的笔试题,一道题就能用来面试各种阶段的前端工程师。

一段看似简单的代码

js闭包问题详解_第1张图片
这道前端笔试题你会不?

上面这段程序的运行结果是?只要你对 JS 中同步和异步代码的区别、变量作用域、闭包等概念有正确的理解,就知道正确答案是5,5,5,5,5,5;

用->表示两次输出间有 1 秒,而逗号表示可忽略呢?

循环执行过程中,几乎同时设置了 5 个定时器,一般情况下,这些定时器都会在 1 秒之后触发,而循环完的输出是立即执行的, 所以结果是 5 -> 5,5,5,5,5;

如何让输出变成:5 -> 0,1,2,3,4?

  • 利用 IIFE(声明即执行的函数表达式)来解决闭包造成的问题:
js闭包问题详解_第2张图片
这道前端笔试题你会不?
  • 利用函数的参数传递是按值传递的特征,:
js闭包问题详解_第3张图片
这道前端笔试题你会不?

如何让输出变成 0-> 1-> 2->3->4->5?

  • 增加定时器
js闭包问题详解_第4张图片
这道前端笔试题你会不?
  • 基于ES6 Promise 的解决方案
js闭包问题详解_第5张图片
这道前端笔试题你会不?
  • 完全基于ES6
js闭包问题详解_第6张图片
这道前端笔试题你会不?
  • 如何让代码层次更好
js闭包问题详解_第7张图片
这道前端笔试题你会不?
  • 能否使用ES7?
js闭包问题详解_第8张图片
这道前端笔试题你会不?
  • 还能优化吗?
js闭包问题详解_第9张图片
这道前端笔试题你会不?

结语

一道看似简单的笔试题,其实背后可以考察的东西很多,作为一个有追求的码农,不断打牢基础,才能写得出让自己下跪的代码!

你可能感兴趣的:(js闭包问题详解)