javascript - 我需要清楚地解释这些嵌套的 For 循环
问题描述
let n = 5;
for (let i = 0; i <= n; i++) {
for (let j = 0; j < i; j++) {
console.log(i, j);
}
}
输出:
1 0
2 0
2 1
3 0
3 1
3 2
4 0
4 1
4 2
4 3
5 0
5 1
5 2
5 3
5 4
如果我没记错的话,一旦内循环完成执行,外循环就会增加,但我不明白为什么j
在某些时候打印 0。递增时不会重新定义初始化的表达式吗?
解决方案
外循环的每次迭代都会从头开始评估整个内循环(包括将 j 初始化为从零开始)。
- 第一次外循环迭代:
- 我设置为 0。
- 第一次内循环迭代:
- j 设置为 0。
- 内循环条件 j < i 为 False,因为它们都为零。
- 内部循环体不运行。
- 第二次外循环迭代:
- i 递增到 1。
- 第二次外循环迭代中的第一次内循环迭代:
- j 设置为 0。
- (i=1,j=0) 记录到控制台
- 第二次外循环迭代中的第一次内循环迭代:
- j 递增到 1,内循环条件为 False。内循环不会第二次运行。
- 第三次外循环迭代:
- i 增加到 2。
- 第三次外循环迭代中的第一次内循环迭代:
- j 设置为 0。
- (i=2,j=0) 记录到控制台
- 第三次外循环迭代中的第二次内循环迭代:
- j 加 1
- (i=2,j=1) 记录到控制台
- ... ETC
推荐阅读
- rabbitmq - docker运行rabbitmq时挂载目录,导致'管理插件'插件无法正常运行
- python - 如何在一个 for 循环中同时遍历两个列表,使用 django 模板在聊天机器人应用程序中实现
- javascript - 配置 Webpack 以使用清单 json 文件
- python - 从背包密码中的公钥计算私钥
- c++ - 如何让 C++ 函数返回不同的类型?
- java - Maven TestNG - Command Line Execution Not Triggering @Before or @After Methods
- google-bigquery - Variable as partition date in dbt, when loading BigQuery table
- next.js - How do you share data over multiple getStaticProps calls?
- cassandra - 文件末尾的不完整声明
- python-3.x - CGI script not running on server