实现每隔一秒打印一次hello world

2019-07-30  本文已影响0人  Johnson23
let func = (arg0) => {
  for(let i = 0; i < 5; i++) {
    setTimeout(() => console.log(arg0), 1000 * i, arg0)
  }
}

func("hello world")
function func(arg0) {
  for(var i = 0; i < 5; i++) {
    (function (i) {
      setTimeout(function() {
        console.log(arg0)
      }, 1000*i, arg0)
    })(i)
  }
}

func("hello world")

当setTimeout执行的时候,i 的值才能确定,这时循环模块已经运行完成,i 值为5。
使用立即执行函数,立即绑定,用每次的值绑定到事件上,而不是循环结束的值。

function test(timing){
  return function(arg0) {    // 闭包
    setTimeout(function() {  // 引用了外部变量timing,使timing一直存在内存中,直到setTimeout执行完毕。
      console.log(arg0)
    }, 1000 * timing, arg0) 
  }
}

function func(arg0) {
  for(var i = 0; i < 5; i++){
    test(i)(arg0)
  }
}

func("hello world")

这里使用到了闭包的概念,为每一个回调都创建一个新的词法环境。

容易犯错的地方:

上一篇 下一篇

猜你喜欢

热点阅读