首页 > 解决方案 > 将函数推送到数组,将 let 转换为 var

问题描述

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();
    });
}

标签: javascriptvariablesecmascript-6scopeecmascript-5

解决方案


您可以将其放入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();
    });
}

推荐阅读