【问题标题】:why the var cannot be reassign?为什么不能重新分配var?
【发布时间】:2018-02-16 13:43:36
【问题描述】:

我调试了这个函数,发现var indexOfString找到一个索引后无法更新,为什么?

function occurrencesOfSubstring(fullString, substring){
    var countOfString = 0
    var indexOfString = 0
    while(true){
        indexOfString = fullString.indexOf(substring,indexOfString)
        if (indexOfString > 0){
            countOfString += 1
        }else{
            return countOfString
        }
    }
}

【问题讨论】:

  • 需要明确的是,您并没有收到指出变量无法重新分配的错误消息,而是想知道为什么它没有改变?
  • @Teemu 我应该放在哪里?
  • @Teemu 不,这不是问题所在。 OP 并没有真正发布问题所在。
  • 返回总是未定义,是吗?
  • if (indexOfString > 0){ 如果indexOfString 返回0 怎么办?如果您在运行时单步执行代码并检查变量,将更容易找到有缺陷的逻辑。

标签: javascript loops variables var let


【解决方案1】:

谢谢你们,我知道问题出在哪里了。

function occurrencesOfSubstring(fullString, substring){
    var countOfString = 0
    var indexOfString = 0
    while(true){
        indexOfString = fullString.indexOf(substring,indexOfString + 1)
        if (indexOfString > 0){
            countOfString += 1
        }else{
            return countOfString
        }
    }
}

【讨论】:

    【解决方案2】:

    试试这个:

    var indexOfString = -1;
    ...
        indexOfString = fullString.indexOf(substring,indexOfString + 1);
    

    否则,每次执行循环时,您都会不断找到相同的索引。

    另外,请记住索引是从零开始的,因此如果字符串的“第一个”字符开始匹配您的子字符串,您将得到 0 作为结果。因此,您可以将条件更改为:

        if (indexOfString >= 0){
            countOfString += 1
        }else{
            return countOfString
        }
    

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 2023-03-05
      • 2016-04-06
      • 2011-03-07
      • 2016-04-08
      • 2018-09-09
      相关资源
      最近更新 更多