this 和 ES6

146 阅读3分钟

this

    是js中的关键字,在不同的作用域中,代表的含义是不同的
    
    具体含义:
            全局的this --> window
            普通函数的this --> window
            定时器函数的this --> window
            自调用函数的this --> window
            对象的方法的this --> 这个对象
            事件函数里的this --> 这个元素
            箭头函数里的this --> 上级作用域中的this
     
    this的理解:
            函数定义不能确定this含义,取决于调用形式
            
    改变this的含义:
            call -- 函数.call(新的this含义,给函数传实参) ---- 调用函数并改变this -- 可以精准的检测数据类型 -- {}.toString.call(数据) -- [object 构造函数名字]
            
            apply -- 函数.apply(新的this含义,[给函数传实参]) ---- 调用函数并改变this -- 可以将伪数组转成数组 -- [].slice.call(伪数组) 
            
            bind -- 函数.bind(新的this含义) -- 返回新的函数 -- 复制函数并改变this -- 新函数中的this和原函数中的this不同
            

ES6新增

    定义变量的关键字 letconst
        const:
                定义就必须赋值
                值不允许改变 
       所有const也被叫做常量
       
   letconstvar的区别
           letconst 
                       都不能预解析
                       都不能重复定义
                       都自带块级作用域:
                                       循环中执行异步代码或绑定事件,在异步代码中或者事件中,可以使用循环的变量
                                       全局中的letconst定义的变量不在window中
  
  模板字符串 -- 使用反引号定义字符串 
                                  可以多行定义一个字符串
                                  在控制台多行显示
                                  `<tr>
                                       <td></td>
                                       <td></td>
                                       <td></td>
                                   </tr>
                                   `
                                  在字符串中通过${变量名}直接解析变量,不用拼接
                                  `我的名字叫${name}`
   
   对象简写 -- 当对象的键和值所使用的变量名同名,就可以简写
                                       var age = 12  
                                       var obj = {  
                                            name,  
                                            age  
                                       }  
                                        等同于
                                        var obj = {  
                                           name: name,  
                                           age: age  
                                        }
                                            
    当对象的键对应的值是匿名函数,就可以简写  
                                        var obj = {  
                                        eat() {}  
                                        }  
                                        等同于  
                                        var obj = {  
                                        eat: function() {}
   当对象的键对应的值是匿名函数,就可以简写        
                                       var obj = {  
                                            eat() {}  
                                            }  
                                            等同于  
                                            var obj = {  
                                            eat: function() {}  
                                            }
    
  箭头函数 --  对匿名函数简写
                             () => {}

                当只有一个形参的时候,可以省略小括号

                大括号中只有一行代码的时候,可以省略大括号

                如果这行代码中有return,必须省略return  
 
 形参默认值 -- 在定义的函数的时候,给形参直接赋值,表示在函数内这个参数就算没有实参给他赋值,他也有默认值               

 解构赋值 -- 快速的批量的定义变量,并拥有对象或数组中的值

        var {键1, 键2} = 对象 -- 定义了两个变量,变量名分别是键1,键2,值是对象中这两个键对应的值

        var {键1: 新的变量名} = 对象 -- 定义了一个变量,变量名是新的变量名,值是键1在对象中对应的值

        var {键1: {键2}} = 对象 -- 定义了变量,变量名是键2,值是对象.键1中 键2对应的值

        var [变量名] = 数组 -- 定义变量,值是数组的第一个元素

        var [[变量名]] = 数组 -- 定义变量,值是数组中第一个数组中的第一个值   

展开合并运算符 -- ...数组名
            当他作为实参的时候,是将一个数组,展开成多个值
            将一个对象展开成多个键值对
            当他当做形参的时候,是将多个实参收集成一个数组