Javascript:为什么我需要在 for 循环中声明 var i = 0?

标签 javascript

我正在做一个需要递归的问题,用于计算加起来达到一定数量的硬币组合。有效的解决方案如下。困扰我几个小时的一件事是,当我没有在 for 循环中声明 var i = 0 时,它不起作用。据我了解,当我在 for 循环中声明 var 时,它停留在该范围内,就好像我不这样做一样,它是从全局中拉出来的吗?有人可以向我解释为什么这个算法在 jsfiddle.net 上不起作用,除非我在 for 循环中声明 var i = 0。感谢任何可以提供帮助的人。

var coins = [1, 2, 5, 10, 20, 50, 100];
var ways = 0;

function combo(index,amount) {
    //if I write for(i=0;...;i++) it doesn't work 
    for (var i = 0; i <= Math.ceil(amount / coins[index]); i++) {
        amountleft = amount - (i * coins[index]);
        if (amount < 0) {
            break;
        }
        if (amountleft == 0) {
            ways ++;
            break;
        }
        if (amountleft > 0) {
            combo(index + 1,amountleft);
        }
    }
}    


combo(0,50)
console.log(ways)

最佳答案

是的。

你的假设是正确的。如果省略 var,则该变量将是全局变量(或抛出错误,具体取决于您的浏览器)。

如果你的函数是递归的,当来自堆栈中不同位置的循环正在改变(并依赖于迭代)同一个变量时,显然会有干扰。

关于Javascript:为什么我需要在 for 循环中声明 var i = 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821196/

相关文章:

javascript - 设置触发 reactjs-popup

javascript - $http Promise 总是返回原始 Promise?

javascript - stopPropagation 不适用于嵌套 href 标记

javascript - 谷歌涂鸦是如何工作的?

php - 我如何将 json 从 php 传递到 js 并对其进行操作?

javascript - 当我切换行时,将箭头的颜色更改为与 D3 中的行相同

javascript - Font Awesome 图标对齐

javascript - 根据轴承计算 x 和 y

javascript - Jquery 插件无法处理多个元素

javascript - Angular 4 Universal - Google Analytics/仅客户端代码