在 JavaScript 中的 for 循环中重新分配变量的目的是什么?
what is the purpose of reassigning a variable inside a for loop in JavaScript?
>我是初学者,所以我正在解决一个练习,这是一个返回字符串中第一个不重复字母的函数,我的答案根本不起作用,所以当我查看解决方案时,我发现它与我的相似,只是答题表在 for 循环中重新分配了一个全局变量, 重新分配甚至没有改变变量的值。您能否解释一下为什么需要重新分配才能使该功能正常工作。
这是我的代码:
function find(str) {
var array = str.split('');
var result = '';
var counter = 0; // counter declared here
for (var x = 0; x < array.length; x++) {
//counter missing here
for (var y = 0; y < array.length; y++) {
if (array[x] === array[y]) { counter = counter + 1;}
}
if (counter < 2) {
result = array[x];
break;
}
}
return result;
}
这是答卷中正常工作的代码:
function find(str) {
var array = str.split('');
var result = '';
var counter = 0; //counter declared here
for (var x = 0; x < array.length; x++) {
counter = 0; //counter is reassigned here
for (var y = 0; y < array.length; y++) {
if (array[x] === array[y]) { counter = counter + 1;}
}
if (counter < 2) {
result = array[x];
break;
}
}
return result;
}
重新分配甚至没有改变变量的值。
是的,确实如此。
请注意,counter
变量应该是外部循环的局部变量,而不是两个循环的全局变量(如在代码中那样)。最好写
function find(str) {
var array = str.split('');
var result = '';
//var counter; (hoisted)
for (var x = 0; x < array.length; x++) {
var counter = 0;
// ^^^
for (var y = 0; y < array.length; y++) {
if (array[x] === array[y]) counter = counter + 1;
}
if (counter < 2) {
result = array[x];
break;
}
}
return result;
}
但是,由于var
的作用域始终限定为函数,因此将var
声明放置在何处并不重要。尽管变量在外循环的每个回合开始时都用0
(重新)初始化确实很重要。
由于内部循环,计数器的值在开始子 for(第二个)的过程之前被分配给 0。请注意,中断情况取决于您的计数器值。
如果 array.length = 5 且元素:{1,2,1,3,4} 则
counter x y
0 0 0 (initial)
0 0 0 (if array[0] == array[0]) counter++
1 0 1 (if array[0] == array[1]) nothinghappens
1 0 2 (if array[0] == array[2]) counter++
2 0 3 (if array[0] == array[3]) nothinghappens
2 0 4 (if array[0] == array[4]) nothinghappens
计数器<2 => 否 所以增加 X,设置计数器 0 并再次循环!
counter x y
0 1 0 (initial-2)
0 1 0 (initial-2) if (array[1] = array[0]) nothinghappens
0 1 1 (initial-2) if (array[1] = array[1]) counter++
1 1 2 (initial-2) if (array[1] = array[2]) nothinghappens
0 1 3 (initial-2) if (array[1] = array[3]) nothinghappens
0 1 4 (initial-2) if (array[1] = array[4]) nothinghappens
这里计数器<2,所以结果 = 数组[1] = 2;
这就是您的服务器端代码的工作方式。如果在第二个 for 循环开始之前未将计数器设置为 0,我们将无法获得正确的结果,因为在这种情况下计数器值将为 3,并且循环将继续。
相关文章:
- Javascript 将变量分配给警报
- Javascript变量分配-按类别
- 为变量分配多个nodejs导出返回值时出现问题
- 使用Javascript中的回调处理变量分配
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 使用一个表达式将两个变量分配给相同的值
- 将变量分配给函数在JavaScript中不起作用
- 如何在yahoo weather中将变量分配到javascript src脚本中
- 服务变量分配了数据,但在访问时始终未定义
- 如何在用户单击提交按钮时为变量分配任意值
- 将JavaScript变量分配给同一页面上的PHP变量
- Javascript是否为具有未定义值的变量分配32位内存
- 为变量分配回调函数
- 如何在javascript中为单个变量分配多个值
- 将全局变量分配给以下 Javascript
- 如何将变量分配给链接中包含的信息?(Javascript/HTML)
- 如果我为 JS 变量分配一个新值,它会破坏它的绑定吗?
- 如何将 javascript 变量分配给隐藏的输入
- 为变量分配有限集合中的随机元素
- 如何使用由多行组成的 django 模板变量分配 javascript 变量