致敬尴尬的面试...

123 阅读1分钟

前言

Hello,大家好啊,我大熊。今天面试遇到一道经典的面试题,但恰恰是这道经典的面试题让我略显尴尬。不能让这份尴尬只让我独享,我要将其暴露出来,捶打我自己的脸颊。才有勇气挑战下一家!(其实我也是裸面,没背八股文)

正题

原题如下,是一道考察作用域 或是 闭包 的题。如果说法有误请纠正!

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

emmmmm,会输出什么?没错,当时的我一看一激动,错眼条件直接变成平时开发的写法,i = 0; i < 5; i++,自信回答,每秒输出一个5,共输出5次。。。

大胆,面试官还说5个5,确定吗?我是谁呢,我就应该坚定,是的,5个5。在经历完一次尴尬的面试后,今晚回想起来这道题,不是5个6吗????倘若有天您刷到这篇文章,请您一定要相信我当时真的是看走眼了!!!

加强

面试官:那如何改变它呢?我就想要它能正常输出?

我:把 var 改成 let

面试官:(我出这个题就想让你这么简单的改吗?)还有吗?

我:用闭包。(于是乎我就开始语无伦次的开始各种造谣,因为我当时脑子也有些空白了,我知道我说的肯定是错的,哈哈哈哈哈,下面贴上今晚我回想后的解法)

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

结语

面试前,该背该看的还是过一遍,希望不要再出现尴尬的面试了,不然我真的会谢...