代码

  1. for (var i = 0; i< 10; i++){
  2. setTimeout((i) => {
  3. console.log(i);
  4. }, 1000,i)
  5. }

解题思路

  1. 使用es6的新关键字let,把作用域固定
  2. bind
  3. IIFE,立即执行函数

解法一:let

  1. for (let i = 0; i< 10; i++){
  2. setTimeout(() => {
  3. console.log(i);
  4. }, 1000)
  5. }

解法二:bind

  1. for (var i = 0; i< 10; i++){
  2. setTimeout(((i) => {
  3. console.log(i);
  4. }).bind(null, i), 1000)
  5. }

解法三: IIFE

  1. for (var i = 0; i< 10; i++){
  2. setTimeout(((i) => {
  3. console.log(i);
  4. })(i), 1000)
  5. }