[英]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.