代码之家  ›  专栏  ›  技术社区  ›  Ashish Kamble

如何正确使用IIFE在数组中分配具有正确var数据的函数[[副本]

  •  0
  • Ashish Kamble  · 技术社区  · 5 年前

    var funcs = [];
    // let's create 3 functions
    for (var i = 0; i < 3; i++) {
      // and store them in funcs
      funcs[i] = function() {
        // each should log its value.
        console.log("My value: " + i);
      };
    }
    for (var j = 0; j < 3; j++) {
      // and now let's run each one to see
      funcs[j]();
    }

    它输出:

    我的价值观:3

    我的价值观:3

    我的值:0
    我的价值:1


    var buttons = document.getElementsByTagName("button");
    // let's create 3 functions
    for (var i = 0; i < buttons.length; i++) {
      // as event listeners
      buttons[i].addEventListener("click", function() {
        // each should log its value.
        console.log("My value: " + i);
      });
    }
    <button>0</button>
    <br />
    <button>1</button>
    <br />
    <button>2</button>

    或异步代码,例如使用承诺:

    // Some async wait function
    const wait = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms));
    
    for (var i = 0; i < 3; i++) {
      // Log `i` as soon as each promise resolves.
      wait(i * 100).then(() => console.log(i));
    }

    这在中国也很明显 for in for of 循环:

    const arr = [1,2,3];
    const fns = [];
    
    for(var i in arr){
      fns.push(() => console.log(`index: ${i}`));
    }
    
    for(var v of arr){
      fns.push(() => console.log(`value: ${v}`));
    }
    
    for(var f of fns){
      f();
    }

    这个基本问题的解决办法是什么?

    0 回复  |  直到 5 年前