javascript – 如何在循环中的回调中引用`i`的正确值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何在循环中的回调中引用`i`的正确值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1706字,纯文字阅读大概需要3分钟。
内容图文
我有这个代码:
for (var i = 0; i < result.length; i++) {
// call a function that open a new "thread"
myObject.geocode({ param1: "param" }, function(results, status) {
alert(result.title[i]);
});
}
.geocode函数(不是我的,所以我无法编辑)打开一个新的执行“线程”.
当我尝试在每一步上打印标题时,我总是得到i的最后可能值.
如何为每次迭代保留对i的正确值的引用?
解决方法:
你可以在循环中创建一个闭包;
for (var i = 0; i < result.length; i++) {
// call a function that open a new "thread"
(function (i) {
myObject.geocode({ param1: "param" }, function(results, status) {
alert(result.title[i]);
});
}(i));
}
所以我们在这里创建一个函数;
(function (i) {
myObject.geocode({ param1: "param" }, function(results, status) {
alert(result.title[i]);
});
});
…接受一个名为i的参数,并启动地理编码请求.通过将(i)添加到函数表达式的声明的末尾,我们立即运行该函数并将其传递给i的当前值.
(function (i) {
myObject.geocode({ param1: "param" }, function(results, status) {
alert(result.title[i]);
});
}(i));
变量i已经存在于比闭包更高的范围并不重要,因为i的本地声明会覆盖它.我们传递给闭包的变量,或者闭包调用变量的名称可能不同;
(function (anotherVariable) {
myObject.geocode({ param1: "param" }, function(results, status) {
alert(result.title[anotherVariable]);
});
}(aVariable));
或者你也可以将逻辑提取到另一个函数(我更喜欢它,但它不那么酷):
function geocode(i) {
myObject.geocode({ param1: "param" }, function(results, status) {
alert(result.title[i]);
});
}
for (var i = 0; i < result.length; i++) {
geocode(i);
}
问题在于回调函数使用的i变量;正如您所发现的那样,在回调执行时已经移动了.上述两种解决方案都为每次迭代创建了另一个变量,这就是回调操作.
内容总结
以上是互联网集市为您收集整理的javascript – 如何在循环中的回调中引用`i`的正确值?全部内容,希望文章能够帮你解决javascript – 如何在循环中的回调中引用`i`的正确值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。