# 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