我正在尝试为两个整数之间的“接近”行为提出一种算法。基本上,给定两个整数a和b,我想a“接近” b,即使b小于a. 我认为这应该看起来是循环增量函数的交换:
for (var i = a; approachCond(i, a, b); approachDir(i,a, b)) {
// some fn(a, b);
}
Run Code Online (Sandbox Code Playgroud)
在哪里
approachCond(i, a, b) {
return a < b ? i < b : i > b;
}
Run Code Online (Sandbox Code Playgroud)
和
approachDir(i, a, b) {
return a < b ? i++ : i--
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试这样做时,浏览器会冻结(Chrome)。有谁知道如何动态改变循环的方向?
问题出在approachDir. i++是后i--自增和后自减。这意味着他们在返回原始值后更新变量。因此该函数返回原始值,而不是更新后的值。要在返回之前更新变量,您应该使用or 。++i--i
但是您根本不需要使用增量运算符,因为局部变量将立即消失。只需返回新值即可。
function approachDir(i, a, b) {
return a < b ? i + 1 : i - 1;
}
Run Code Online (Sandbox Code Playgroud)
您还需要在循环中重新分配变量:
for (var i = a; approachCond(i, a, b); i = approachDir(i, a, b)) {
...
}
Run Code Online (Sandbox Code Playgroud)
在编写代码的方式中,您假设变量是按引用传递的,而不是按值传递的,因此函数中的增量将修改调用者的变量。
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |