javascript - 无法理解这段 javascript 代码如何控制流程?
问题描述
这是我无法理解其流程的代码,以及即使在 for 循环结束后 i 的值如何持续存在。
var printNumTwo;
for (let i = 0; i < 5; i++) {
if (i === 2) {
console.log("now");
printNumTwo = function() {
console.log("inside");
return i;
};
console.log(i);
}
console.log(i);
}
console.log(printNumTwo());
程序的输出是
0
1
now
2
2
3
4
inside
2
解决方案
这种行为的原因是闭包
闭包使您可以从内部函数访问外部函数的范围。在 JavaScript 中,每次创建函数时都会在函数创建时创建闭包。Mozilla 文档
var printNumTwo;
for (let i = 0; i < 5; i++) {
if (i === 2) {
console.log("now");
printNumTwo = function() {
console.log("inside");
return i;
};
console.log(i);
}
console.log(i);
}
console.log('now calling printNumTwo()')
let s=printNumTwo();
console.log('now printing return value of printNumTwo()')
console.log('retrun value of PrintNumTwo is:'+s);
推荐阅读
- azure - 如何在不回发的情况下在 bot farmework 的自适应/英雄卡中创建 3 个选项按钮
- c - UL vs casting to unsigned long
- python - 为什么在输出中我得到值作为列表
- python - 不同的 Python 包使用同一个 DLL 的不同版本
- python - MongoClient 是否会维护其集合对象直到被销毁?(Python)
- perl - 如果我指定了 XLSX 或 ZIP 文件,我如何用 perl 区分
- django - 找不到页面 (404),空路径与其中任何一个都不匹配
- sql - R Udpipe包安装到SQL Server错误
- spring - 配置为单个实例,但实例化了两次
- html - Sendgrid 中的自定义 .woff 格式字体 - 如何使用?