javascript - 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 循环更新了,因此它不应该是未定义的。谢谢阅读!
解决方案
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"
推荐阅读
- apache-spark - Spark:如何仅对部分数据集应用过滤器?
- regex - 使用 Apache NiFi 如何删除流文件内容或属性值中的最后一个字符
- reactjs - 如何将组件作为 google.maps.MarkerImage 的图标传递?
- algorithm - 检查在总和等于给定值的 N 个元素的数组中是否存在 K 个元素的非连续子数组
- .net - 如何检查认知搜索中是否存在索引?
- excel - Excel中表的同一列上的多个排序
- angular - 使用材料滑块在折线图(highcharts)上选择带有工具提示的动态值
- sql - 如何编写 SQL 查询以将两个不同的日期列与日期维度表连接起来
- python - 将嵌套字典列表转换为数据框内的集合
- php - PHP - 数组中的数组中的数组,等等