将函数推送到数组,将 let 转换为 var
Push Functions to an array, Convert let to 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()
这应该输出所需的值
是否可以使用 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()
这应该输出所需的值