# es6
let const
- 解决重复变量声明,导致数据被覆盖的问题
- 变量提升导致的怪异的数据访问 —— 闭包问题 —— 立即执行函数
- 全局变量污染
- let 块级作用域{} 不会挂到全局对象 window 身上 | 不允许当前作用域范围内重复声明 | 变量提升,放到暂时性死区,会报错
- const 同 let ,声明时必须赋值,且不可重复赋值。
事件循环
promise A+ 规范
promise API
Proxy 代理
- 利用 Object.defineProperty() 实现的对象监听
function observer (target){ const div = document.getElementsByClassName('warpper')[0]; const ob = {}; const props = Object.keys(target); for(const prop of props){ console.log(prop); Object.defineProperty(ob, prop, { get() { return target[prop]; }, set(val) { target[prop] = val; render(); }, enumerable: true, }) } console.log(ob) render(); function render(){ let html = ''; for(prop of Object.keys(ob)) { html += ` <p><span> ${prop} : </span><span> ${ob[prop]} </span></p> `; } div.innerHTML = html; } return ob; } const target = { a: 1, b: 2 } const ob = new observer(target);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35使用代理:
function observer (target){ const div = document.getElementsByClassName('warpper')[0]; const ob = new Proxy(target, { get(target, prop) { return Reflect.get(target, prop) }, set(target, prop, val) { Reflect.set(target, prop, val); render(); } }) console.log(ob) render(); function render(){ let html = ''; for(prop of Object.keys(ob)) { html += ` <p><span> ${prop} : </span><span> ${ob[prop]} </span></p> `; } div.innerHTML = html; } return ob; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
promise →