代码之家  ›  专栏  ›  技术社区  ›  Ali Adravi

带for循环的闭包[副本]

  •  0
  • Ali Adravi  · 技术社区  · 8 年前

    (i) 花括号后

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

    这是在匿名函数中传递参数值的方法吗?

    3 回复  |  直到 8 年前
        1
  •  1
  •   Jonas Wilms    8 年前

    就拿这个案子来说:

      function fn(j) { // function declaration
        console.log(j);
      }
    
      fn(j); // function call
    

    调用函数。现在,由于函数也可以是表达式,它们可以对引用求值,并且可以通过添加 ()

      function(j){ /*..*/ }(i)
    

    实际上不用等待就直接调用函数。

        2
  •  1
  •   31piy    8 年前

    第一个论点 setTimeout i 提供该参数的值,并且 (i) .

    直接在 因为这会产生不必要的行为,因为 以及 for 循环。

    使用函数表达式处理这种情况可以确保 一定会 j

        3
  •  1
  •   Mamun    8 年前

    这将创建立即执行的函数表达式(),JavaScript引擎将通过该表达式直接解释函数。