繁体   English   中英

Javascript Function 在 for 循环第一次运行后返回 undefined

[英]Javascript Function returns undefined after for-loop runs the first time

我有一个关于 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

除了 output 'undefined' 之外,它的工作原理完全符合我的要求。 我知道变量 fulltrim 在被 for 循环更新之前被访问并返回,但我不明白为什么。 换句话说,我不明白为什么 output 不是

aaa
aaaaaa
aaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaaaaa

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

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

用空字符串初始化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 时打印空行,您可以 append 一个空字符串而不是\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的值

// 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"

您需要初始化 fulltrim。

 function fiveLine(s){
      let trim=s.trim()
      let fulltrim= "";
    
      for (let i=1; i<=5; i++){
      fulltrim+="\n"+trim.repeat(i)
      
      }
      return fulltrim
    }
  • fulltrim; 未设置为任何值,因此 JS 将其视为undefined
  • 为了防止由第一个\n连接引起的第一个空行 - 使用fulltrim = []fulltrim.push(s.repeat(i))代替。
  • 最后返回fulltrim.join("\n");

 function fiveLine(s){ s = s.trim(); const fulltrim = []; for (let i=1; i<=5; i++) fulltrim.push(s.repeat(i)); return fulltrim.join("\n"); } console.log(fiveLine("a"));

这是另一个类似的版本:

 const strRepeat = (s, t) => { s = s.trim(); return [...Array(t)].reduce((a, o, i) => (a.push(s.repeat(i+1)), a), []).join("\n"); } console.log(strRepeat("a", 5));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM