将函数推送到数组,将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
执行您想要的操作,您可以使用临时函数在n
和next
值周围创建闭包。
我稍微更改了代码以留下有意义的部分
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的主要内容,如果未能解决你的问题,请参考以下文章
如何将某个函数推送到返回数组的函数?(是否可以推送到返回数组的函数)[关闭]
如果项目位于 javascript 对象中,如何将其推送到数组中 [state.lastValue.push 不是函数]