为啥不能重新分配var?
Posted
技术标签:
【中文标题】为啥不能重新分配var?【英文标题】: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
怎么办?如果您在运行时单步执行代码并检查变量,将更容易找到有缺陷的逻辑。
【参考方案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
【讨论】:
以上是关于为啥不能重新分配var?的主要内容,如果未能解决你的问题,请参考以下文章
为啥不能为 Java 中的 var 关键字分配 lambda 表达式?