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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将函数推送到数组,将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();
    });
}
答案

你可以把它放入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();
    });
}
另一答案

要使用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()

以上是关于将函数推送到数组,将let转换为var的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose push() 函数没有将数据推送到数组中

如何将某个函数推送到返回数组的函数?(是否可以推送到返回数组的函数)[关闭]

将复选框值推送到状态 onChange 的数组

如果项目位于 javascript 对象中,如何将其推送到数组中 [state.lastValue.push 不是函数]

从异步回调函数将对象推送到本地数组

postgresql 函数 - 如何将新的 json 对象推送到 json 数组?