首页 > 解决方案 > Javascript函数在for循环第一次运行后返回未定义

问题描述

我有一个关于 for 循环和变量的基本问题。我有以下代码:

function fiveLine(s){
  let trim=s.trim()
  let fulltrim;

  for (let i=1; i<=5; i++){
  fulltrim+="\n"+trim.repeat(i)
  
  }
  return fulltrim
}

调用时,使用 FiveLine('a') 打印

undefined
aaa
aaaaaa
aaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaaaaa

除了输出“未定义”之外,它可以像我想要的那样完美地工作。我知道变量 fulltrim 在被 for 循环更新之前被访问并返回,但我不明白为什么。换句话说,我不明白为什么输出不是

aaa
aaaaaa
aaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaaaaa

对我来说,变量 fulltrim 在第一次返回时已经被 for 循环更新了,因此它不应该是未定义的。谢谢阅读!

标签: javascript

解决方案


fulltrim为 1 时未定义i,这就是它打印未定义的原因。

fulltrim用空字符串初始化

let fulltrim = '';

function fiveLine(s) {
  let trim = s.trim()
  let fulltrim = '';

  for (let i = 1; i <= 5; i++) {
    fulltrim += "\n" + trim.repeat(i)

  }
  return fulltrim
}

console.log(fiveLine('a'))

i为了防止在等于 1时打印空行,您可以附加一个空字符串\n而不是fulltrim

function fiveLine(s) {
  let trim = s.trim()
  let fulltrim = '';

  for (let i = 1; i <= 5; i++) {
    fulltrim += (i == 1 ? '' : "\n") + trim.repeat(i);
  }
  return fulltrim
}

console.log(fiveLine('a'))

编辑:

要了解代码中实际发生的情况,请参阅以下演示如何fulltrim在循环的每次迭代中更新value

// i = 1
"undefined
a"

// i = 2
"undefined
a
aa"

// i = 3
"undefined
a
aa
aaa"

// i = 4
"undefined
a
aa
aaa
aaaa"

// i = 5
"undefined
a
aa
aaa
aaaa
aaaaa"

推荐阅读