我有以下代码:
var that = this, k,
colors = ['#468966','#FFF0A5','#FFB033B','#B64926','#8E2800'];
data = [];
that.k=0;
for (var i in answers){
data.push({
key: i,
color: colors[k%5],
values: []
});
answers[i].forEach(function(answer,index){
that.data[k].values.push({
label: 'user_'+index,
value: answer.answer
});
});
that.k++;
}
我希望能够在data[]
循环中访问colors
和k
以及for (var i in answers)
。如何将外部上下文传递给此函数?或者还有另一种选择吗?
我可能省略了一些信息:这是在函数内部,所以代码如下:
var createChartData = function(answers){
var that = this, k,
colors = ['#468966','#FFF0A5','#FFB033B','#B64926','#8E2800'];
data = [];
k=0;
for (var i in answers){
data.push({
key: i,
color: colors[k%5],
values: []
});
debugger;
answers[i].forEach(function(answer,index){
that.data[k].values.push({
label: 'user_'+index,
value: answer.answer
});
});
k++;
}
return data;
}
但我认为这应该是无关紧要的。在for
循环内,我无法访问k
或colors
,令我惊讶的是我可以访问that
。我很困惑......
好吧,我可能还有其他一些问题,因为现在它有效,我会稍后再检查一下,找出问题所在。
答案 0 :(得分:1)
这些变量已作为closure变量
在foreach回调中可访问我可能会看到的唯一变化是删除变量that
的使用,转而使用forEach()的thisArg
参数
var k,
colors = ['#468966', '#FFF0A5', '#FFB033B', '#B64926', '#8E2800'];
data = [];
this.k = 0;
for (var i in answers) {
data.push({
key: i,
color: colors[k % 5],
values: []
});
answers[i].forEach(function (answer, index) {
this.data[k].values.push({
label: 'user_' + index,
value: answer.answer
});
}, this);
this.k++;
}