
本文详解 JavaScript 中变量作用域对字符串拼接输出的影响,通过修复嵌套循环中 str 变量不可访问的问题,实现带缩进的星号图案打印。
本文详解 javascript 中变量作用域对字符串拼接输出的影响,通过修复嵌套循环中 `str` 变量不可访问的问题,实现带缩进的星号图案打印。
在 JavaScript 中,使用 let 声明的变量具有块级作用域(block scope),这意味着它仅在声明它的 {} 代码块内有效。观察原始代码:
for (let k = 0; k <p>由于 <code>str</code> 在内层 <code>for</code> 循环块中声明,其生命周期止于该块末尾,因此外部的 <code>console.log()</code> 无法访问它。</p><p>✅ 正确做法是将 <code>console.log()</code> 移入 <code>k</code> 循环内部,确保在 <code>str</code> 仍处于作用域时使用:</p><pre class="brush:php;toolbar:false;">const rows = 3;
for (let i = rows - 1; i > 0; i--) {
let space = '';
for (let j = 1; j <p>运行结果为:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill7377" title="Java Maven Secondary Analysis"><img
src="https://img.php.cn/upload/skill/000/000/081/179144831942131.jpg" alt="Java Maven Secondary Analysis" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill7377" title="Java Maven Secondary Analysis" class="overflowclass">Java Maven Secondary Analysis</a>
<p class="overflowclass">分析ZIP压缩包或GitLab仓库中的Java Maven项目,确定二次开发范围、类数量、模块分布及生产相关指标。</p>
</div>
<a rel="nofollow" href="/xiazai/skill7377" title="Java Maven Secondary Analysis" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><pre class="brush:php;toolbar:false;"> *
**
***? 优化建议:
- 避免重复拼接字符串(性能较差),可改用
Array(n).fill('*').join(''); - 空格部分也可简化为
space = ' '.repeat(i); - 若需更清晰的结构,可将星号行生成逻辑提取为独立函数。
⚠️ 注意事项:
- 不要混淆
let(块级)与var(函数级)的作用域行为; - 在调试类似问题时,优先检查变量声明位置与使用位置是否处于同一作用域块;
- 使用现代浏览器或 Node.js 的严格模式有助于及早捕获此类引用错误。
掌握作用域规则,是写出健壮、可维护循环逻辑的关键基础。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










