持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
前言
今天没有写博客没有什么思路,于是决定去刷下js题目,做一个题目解析. 错题如下:
1.首次错误思路
- (1).首先定义了一个test立即执行函数,这个函数是一个嵌套函数,函数内部还有一个函数
-
- 里面的函数访问了外部的变量i,初步判断,这道题目要考察闭包的知识,
-
- 闭包的作用是可以使变量生命周期变长,并且内部的函数可以访问外部变量
- (2).之后是一个for循环
-
- 初始值i为0,循环次数为20,i最终值为20
-
(3).最后控制台输出test()
-
- test()输出的是sum,由于在for循环中执行了20词,并且闭包中变量生命周期变长不会被回收
-
- 所以num应为20,num++为21
-
- 所以最终输出的应为20,num结果为21
-
所以我选D:21,20
2.本题正确思路
- (1).首先定义了一个test立即执行函数,这个函数是一个嵌套函数,函数内部还有一个函数
-
- 里面的函数访问了外部的变量i,初步判断,这道题目要考察闭包的知识,
-
- 闭包的作用是可以使变量生命周期变长,并且内部的函数可以访问外部变量
- (2).之后是一个for循环
-
- 初始值i为0,循环次数为20,i最终值为20
-
(3).最后控制台输出test()
-
- test()输出的是sum,由于在for循环中执行了20次,并且闭包中变量生命周期变长不会被回收
-
- 所以num应为20,num++为21
-
- 同时后++运算符是先用后加,
-
- 所以最终输出的应为21,num结果为20
-
答案为B:20,21
3.实际调试一下
var test = (
function () {
var num = 0;
return () => {
return num++
}
}()
);
for (var i = 0; i < 20; i++) {
test()
}
console.log(test())
- 输出结果为20
4.反思总结
4.1闭包
- 目的:内部函数引用外部的函数的变量,使变量不被回收,生命周期变长
- 实现形式:嵌套函数
4.2自增运算符(前++和后++的区别)
- 目的:都是使某一变量自己增加1,如果独自一行,则没有区别,如for循环中作为循环值时没区别
- 不同
- 前++,变量先加1,后参加操作,
- 后++,变量先进行操作,再加1.