javascript-在循环中使用相同的变量来解决“循环中的闭包”问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-在循环中使用相同的变量来解决“循环中的闭包”问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1865字,纯文字阅读大概需要3分钟。
内容图文
继续进行到this的问题,我尝试了以下在两个循环中使用相同变量的代码,并获得了预期的结果.我的问题是,为什么?
因此,初始代码为:
var funcs = [];
for (var i = 0; i < 3; i++) { // let's create 3 functions
funcs[i] = function() { // and store them in funcs
console.log("My value: " + i); // each should log its value.
};
}
for (var j = 0; j < 3; j++) {
funcs[j](); // this will not give desired output
}
输出如下:
>我的价值:3
>我的价值:3
>我的价值:3
而预期的输出是:
>我的值:0
>我的价值:1
>我的价值:2
现在,如果在第二个循环中也使用变量“ i”(全局变量),则代码如下所示:
var funcs = [];
for (var i = 0; i < 3; i++) { // let's create 3 functions
funcs[i] = function() { // and store them in funcs
console.log("My value: " + i); // each should log its value.
};
}
for ( i = 0; i < 3; i++) {
funcs[i](); // this gives desired output
}
我得到了预期的输出,
>我的值:0
>我的价值:1
>我的价值:2
为什么?
解决方法:
Now, if I use variable ‘i’ (a global variable) in the second loop as
well … I get the intended output … WHY?
因为当您执行第一个执行循环时:
for (var j = 0; j < 3; j++) {
funcs[j]();
}
构造数组的循环已经完成,全局变量i的值为3,因此console.log(i)会在第一个执行循环的每次迭代中将3记录到控制台.当您执行第二个执行循环时:
for ( i = 0; i < 3; i++) {
funcs[i]();
}
您为循环的每次迭代分配一个新值给全局变量i,而console.log(i)将记录到控制台的正是这个新值:0、1、2.
您如何以简单的方式达到预期的效果?
您可以使用let通过简单的方式获得所需的结果:
"use strict"; // use of let requires strict mode
var funcs = [];
for (let i = 0; i < 3; i++) { // just replace var with let here
funcs[i] = function() {
console.log("My value: " + i);
};
}
for (var j = 0; j < 3; j++) {
funcs[j]();
}
现在,将使用可以访问局部变量的函数来构造该数组,该局部变量在将函数添加到数组时会被分配i的值.
内容总结
以上是互联网集市为您收集整理的javascript-在循环中使用相同的变量来解决“循环中的闭包”问题全部内容,希望文章能够帮你解决javascript-在循环中使用相同的变量来解决“循环中的闭包”问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。