Javascript 为什么$http';s回调不知道自身之外的变量吗?
例如,假设我有以下代码:Javascript 为什么$http';s回调不知道自身之外的变量吗?,javascript,angularjs,Javascript,Angularjs,例如,假设我有以下代码: for(var i=0; i < itemlist.length; i++){ var item = itemlist[i]; var id = item.id; $http.get(id + '.json').success(function(data){ //do something with data. console.log(item.name); } } for(变量i=0;i
for(var i=0; i < itemlist.length; i++){
var item = itemlist[i];
var id = item.id;
$http.get(id + '.json').success(function(data){
//do something with data.
console.log(item.name);
}
}
for(变量i=0;i
控制台中显示的名称将是一个重复值(我认为数组itemlist中的第一个值),即回调函数不知道变量项
就我的理解水平而言,这很奇怪。有没有办法向这个回调函数传递额外的变量-和/或-有人能告诉我为什么这个变量的作用域是这样的吗?假设itemlist是一个数组,你可以使用 正如我在评论中指出的,问题是在循环中错误地使用了闭包变量 如果你想的话,你甚至可以用like
要将值与回调函数关联,应该使用bind。 通过这种方式,您可以将任何对象附加到回调并通过此对象访问它。对象:
function yourFunction() {
for(var i=0; i < itemlist.length; i++){
var item = itemlist[i];
var id = item.id;
var onSuccess = onSuccess.bind({item: item});
$http.get(id + '.json').success(onSuccess);
它应该关闭就好了。&…或者可能
itemlist.forEach(function(item,i){…})
?@JanTuroňyes…在我当前的项目中,我需要支持IE8+,所以我总是使用那些库函数。。。。
itemlist.forEach (function (item, i) {
var id = item.id;
$http.get(id + '.json').success(function (data) {
//do something with data.
console.log(item.name);
})
})
function yourFunction() {
for(var i=0; i < itemlist.length; i++){
var item = itemlist[i];
var id = item.id;
var onSuccess = onSuccess.bind({item: item});
$http.get(id + '.json').success(onSuccess);
function onSuccess(data) {
console.log(this.item.name);
}