将函数推送到数组,将let转换为var

问题描述 投票:0回答:2

是否可以使用var而不是let将函数推送到数组。我正在看的代码是:

function slideRightLoop() {
    let work = [];

    for (var n = 1; n < 5; n++) {
        let next = (n + 1 < 5) ? n + 1 : 1;
        let el = document.querySelector(".position_" + n)[0];
        var change = function change () {
            el.classList.add("position" + next);
            el.classList.remove("position_" + n);
        }
        work.push(change);
    }

    work.forEach(function (n) { 
      return n();
    });
}
javascript variables ecmascript-6 scope ecmascript-5
2个回答
1
投票

你可以把它放入https://babeljs.io/repl/,看看转换成什么。最简单的方法是使循环体成为一个接受所有循环变量作为参数的函数:

function slideRightLoop(n, work) {
  var next = (n + 1 < 5) ? n + 1 : 1;
  var el = document.querySelector(`.position_${n}`);
  var change = function change () {
      el.classList.add(`position_${next}`);
      el.classList.remove(`position_${n}`);
  }
  work.push(change);
}

function slideRight() {
    var work = [];

    for (var n = 1; n < 5; n++) {
      slideRightLoop(n, work);
    }

    work.forEach(function (n) { 
      return n();
    });
}

0
投票

要使用var执行您想要的操作,您可以使用临时函数在nnext值周围创建闭包。

我稍微更改了代码以留下有意义的部分

function slideRight() {
    let work = [];

    for (var n = 1; n < 5; n++) {
        var next = (n + 1 < 5) ? n + 1 : 1;
        let change = function(next, n){
          return function change () {
          console.log(next, n)
        }}
        work.push(change(next, n));
    }
  

    work.forEach(function (n) { 
      return n();
    });
}

slideRight()

这应输出所需的值

© www.soinside.com 2019 - 2024. All rights reserved.