为什么模运算符在 javascript 的 FOR 循环中的工作方式不同?

Why does the modulo operator appear to work differently in FOR loops in javscript?

我正在制作一个简单的 javascript 函数,它接受一个字符串的输入并将其填充到最接近的 8 的倍数。该函数有效,但模运算符在 for 循环中的工作方式似乎有所不同.例如:

var text = "abcdefghi"
if(text.length % 8 !== 0){
  var amt = 8 - (text.length % 8)
  for (let i = 0; i < amt; i++) {
    text = text + "#"
  } 
}
console.log(text)

Returns: abcdefghi#######

但是:

var text = "abcdefghi"
if(text.length % 8 !== 0){
  for (let i = 0; i < text.length % 8; i++) {
    text = text + "#"
  }
}
console.log(text)

还有Returns:abcdefghi#######

根据我对模运算符 text.length % 8 = 1 的理解,给定 9 个字符的字符串输入。因此,为了填充字符串以使其成为 16 个字符,我必须执行 8 - (text.length % 8) = 7。当我将它放入它自己的变量中以便 amt = 7 for 循环循环 7 次并正常工作时。但是,当我在 for 循环中执行操作并删除 8 - 时,它也会循环 7 次,即使 text.length % 8 = 1。有人可以解释一下这里发生了什么吗?

for 循环将在每次循环运行时评估文本的长度。因此,如果您在循环中的文本末尾添加一个主题标签,当它再次计算长度时,它会发现文本比上次长了一个。

所以基本上你是在添加文本而不是再次查找长度,当你在 for 循环之外得到文本的长度时,你将得到一个长度常数并且能够在 for 循环中准确地使用它。

举个例子,当你做恒定长度时,就像你在 for 循环之外的第一个例子中所做的那样,你有一个等式:

repeat until x = y

但是如果你在 for 循环中进行计算,你会得到如下等式:

repeat until x = x + 1

这是行不通的,因为如果每次递增 x 时都重新计算 x + 1,x 不会等于它自身 + 1。