for (var j=0; j<charts.length; j++){
var chart = charts[j].chartImage;
chart["export"].capture({}, function() {
this.toPNG({}, function(data) {
saved_charts[j] = data;
charts_remaining--;
if (charts_remaining == 0) {
console.log(saved_charts[0]);
console.log(saved_charts[1]);
}
})
})
}
我在saved_charts [j]上的问题它无法读取j变量,它说“可以从闭包中访问可变变量”。有没有其他方式所以我可以获得j变量?我知道我可以使用array.push()但由于某种原因,代码以不规则的方式生成数据值,而不会相应地返回数据值。我认为这是因为有些数据太大,所以函数首先返回较小的数据。抱歉,我仍然很难理解Javasript
答案 0 :(得分:3)
这应该有效
for (let j=0; j<charts.length; j++){
如果不支持let
关键字,这是一种经典的方式:
for (var j=0; j<charts.length; j++){
var chart = charts[j].chartImage;
(function(j) {
chart["export"].capture({}, function() {
this.toPNG({}, function(data) {
saved_charts[j] = data;
})
})
})(j);
}
答案 1 :(得分:1)
在旧的JS环境中,您可以创建一个闭包(使用IIFE)来&#34;冻结&#34;变量。像这样:
for (var j = 0; j < 10; j++){
(function(j) {
setTimeout(function () {console.log(j)}, 10);
})(j);
}
答案 2 :(得分:0)
试试这个
for (var j=0; j<charts.length; j++){
var chart = charts[j].chartImage;
(function(p){
chart["export"].capture({}, function() {
(function(q){
this.toPNG({}, function(data) {
saved_charts[q] = data;
charts_remaining--;
if (charts_remaining == 0) {
console.log(saved_charts[0]);
console.log(saved_charts[1]);
}
})
})(p)
})
})(j)
}
或
试试这个
for (var j=0; j<charts.length; j++){
var chart = charts[j].chartImage;
(function(p){
chart["export"].capture({}, function() {
this.toPNG({}, function(data) {
saved_charts[p] = data;
charts_remaining--;
if (charts_remaining == 0) {
console.log(saved_charts[0]);
console.log(saved_charts[1]);
}
})
})
})(j)
}