美文网首页
实现每隔一秒打印一次hello world

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

作者: Johnson23 | 来源:发表于2019-07-30 22:34 被阅读0次
    • ES6写法
    let func = (arg0) => {
      for(let i = 0; i < 5; i++) {
        setTimeout(() => console.log(arg0), 1000 * i, arg0)
      }
    }
    
    func("hello world")
    
    • ES5写法:
    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")
    

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

    容易犯错的地方:

    • setTimeout方法第一个参数不能传参数
    • i 值的变化

    相关文章

      网友评论

          本文标题:实现每隔一秒打印一次hello world

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