【问题标题】:Not overwriting variable?不覆盖变量?
【发布时间】:2011-12-10 20:58:04
【问题描述】:

我正在尝试计算数组中的元素,并且每次添加元素时都必须更新该数字。我正在尝试通过使用以下函数来做到这一点:

function counter() {
    for(var i = 0; i < elements.length; i++) {
        counter = i;
    }
    alert("counter has counted");
}

但它只在第一次工作!第二次调用该函数时它不再起作用,警报甚至没有出现,所以我猜这个过程在 for 循环中被中断了。谁知道原因?

【问题讨论】:

  • 为什么不直接使用elements.length?
  • 行,counter = i 覆盖了窗口属性“counter”,这是您的函数所绑定的。因此,调用该函数会擦除该函数的所有内存。很有禅意。
  • @Pointy: 应该是一个答案...
  • 拜尔斯先生的回答已经在那里了,如果不完整的话:-)
  • @Pointy:那就贴一个更完整的答案吧!

标签: javascript for-loop counter


【解决方案1】:

您不应该为存储计数的变量和您的函数使用相同的名称 (counter)。

counter = i; 行覆盖了对您的函数的引用。下次您尝试调用 counter() 时它将无法正常工作,因为 counter 不再是一个函数。

试试这个:

function update_counter() {
    for(var i = 0; i < elements.length; i++) {
        counter = i;
    }
    alert("counter has counted");
}

【讨论】:

  • 这个。由于counter = i; 不使用var 关键字,counter 的值从 Function 对象重新分配给 Number 原语。
【解决方案2】:

那是因为线

counter = i

这也是你的函数的名称。

因此,下次调用 counter() 时,counter 实际设置为一个整数。

【讨论】:

    猜你喜欢
    • 2019-04-20
    • 2018-09-27
    • 2017-02-25
    • 2021-08-24
    • 2020-09-30
    • 2015-12-04
    • 2013-06-06
    • 2018-02-27
    • 2018-04-23
    相关资源
    最近更新 更多