javascript
# 闭包
https://juejin.cn/post/6844903858636849159
示例:
/*
* @Author: 仲灏<izhaong@outlook.com>🌶🌶🌶
* @Date: 2022-05-31 23:07:12
* @LastEditTime: 2022-05-31 23:07:15
* @LastEditors: 仲灏<izhaong@outlook.com>🌶🌶🌶
* @Description:
* @FilePath: /question100/src/javascript/闭包.js
*/
function createCounter() {
let counter = 5;
const myFunction = function () {
counter = counter + 1;
return counter;
};
return myFunction;
}
const increment = createCounter();
const c1 = increment();
const c2 = increment();
const c3 = increment();
console.log('example increment', c1, c2, c3); // example increment 6 7 8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
它是这样工作的,无论何时声明新函数并将其赋值给变量,都要存储函数定义和闭包。闭包包含在函数创建时作用域中的所有变量,它类似于背包。函数定义附带一个小背包,它的包中存储了函数定义创建时作用域中的所有变量。
示例:
let c = 4
const addX = x => n => n + x
const addThree = addX(3)
let d = addThree(c)
console.log('example partial application', d) // example partial application 7
1
2
3
4
5
2
3
4
5
x 就是闭包中的变量
总结:
- 函数都具有闭包 (全局函数的闭包在全局作用域中, 体现不出, 在函数返回函数中尤为明显)
简单来说就是上级作用域内变量的生命周期,因为被下级作用域内引用,而没有被释放。就导致上级作用域内的变量,等到下级作用域执行完以后才正常得到释放。
# 精度问题
0.1 + 0.2 !== 0.3
- 计算机使用二进制存储数据
- 整数转换二进制没有误差,如9 转换为二进制是 1001
- 而小数可能无法用二进制准确表达,如0.2 转换为1.1001100...
# 原型&原型链
上次更新: 2022/06/05, 20:31:36