es6 const

1. 定义变量    但是  值是常量,一但赋值不能改变

2. 不能重复定义变量

3. 没有变量提升

4.不会给window添加属性

变量的解构赋值

解构赋值

  数组解构赋值

  1.  前后模式必须匹配

  后面的值是什么格式,前面的变量也得是什么格式

  后面值是二维数组,前面的变量声明的时候也得是二维模式

  

  2.前多后少

  前面声明的变量多,后面赋值的值少,解构不成功,就相当于只声明了变量,但没赋值,解构不成功的变量值都是undefined

  

  3.钱少后多

    1.省略赋值

    

    2.不定参数解构赋值    使用...    叫拓展运算符   ...as将后面的值以数组的形式赋值给  as    拓展运算符必须写在后面

    

  4.带默认值的问题

    问题  先给默认值再解构赋值?   还是先解构赋值, 不考虑默认值?

  let [x,y=(function(){console.log("haha");return 10;})()]=[45,23]

    console.log(y)

  没有输出haha说明不是先给默认值,而是先解构赋值,不在考虑默认值。

 所有    就是解构不成功的时候,才会用默认值。就是没有赋值,没有定义

  var a=null     a=[]    a={}     a=""        这都叫定义了

  var a=undefined      才叫没定义

  所以只有结构的时候,后面是undefined的时候,才会用默认值,否则后面给什么就赋值什么。

  对象解构赋值

  1.变量和属性名必须同名,才可以解构赋值

  2.如果结构失败  值是undefined

  3.如果变量名跟属性名不一致

  前面name是属性   后面aa是变量。解构的机制,是对应的属性值赋值给后面的变量。

  4.对象解构的默认值问题

    默认值跟数组解构的默认值是一样的,解构成功就直接赋值,不执行默认值,解构不成功就是没有值,或者值是undefined执行默认值。

    let{name,age=45}={name:"zhang"}      age=45        解构不成功

    let{name,age=45}={name:"zhang",age:undefined} age=45       结构不成功

    let{name,age=45}={name:"zhang",age:12}     age=12

    let{name,age=45}={name:"zhang",age:null}     age=null

  5.对象解构赋值的注意点

{}前面不能没东西 {a}={a:12} x

  6.等号右边在什么情况下能解构?

等号右边的值只要带有length属性,都可以解构

函数参数的解构

    1、函数参数的默认值

前面是形参 后面是默认值。带默认值的参数尽量写后面。

函数参数 等号左边是形参    右边是默认值    函数调用是不传参,走函数形参默认值,函数调用传参,默认值就不走了,走实参。

    2、函数参数的解构赋值

    3、函数作用域

      函数在调用的时候会形成一个私有作域,在这个作用域下声明的变量和参数变量都是私有变量,外界访问不到,同时它在操作相同的变量时,不会操作外部的。

    4、函数的一个类数组参数arguments 是实参构成的集合是一个类数组

还有一种方式可以得到实参

5.箭头函数

    1.箭头函数只使用与匿名函数

      let fn=function(){}   匿名函数

      做回调函数  fn(12,function(){})

      匿名函数:只要不是关键字function 声明的函数都叫匿名函数

      let  fn=(形参)=>{函数体}

      每个函数结束的时候一定要return

      当有一个参数的时候可以省略return

     2.当只有一个参数的时候可以省略()

      

     3、当函数体只有一行代码  且是return xxx; 时候可以省略{}和return

      

   箭头函数的优势

     1.箭头函数没有this指向

       函数中改变this指向的方法

      1.在函数提前对this赋值,that=this

      2.在函数的结尾处{}.bind(this)

      3.在函数的结尾处{}.apply(this)或者是{}.call(this)

      4.使用箭头函数

     2.箭头函数获取实参,不能使用arguments 用...arg

    

    3.箭头函数不能充当类

    因为里面的this指向window  而类中的this指向当前实例对象

函数的角色

    函数可以扮演类    普通函数  Function的实例对象

    类

      每个类身上天生有一个prototype的属性,这个属性是一个对象,里面有一个constructor属性,属性值是他的类。

    注意  

      1.Object 是所有对象的基类   包括 window  event等

      2.普通函数的父类Function

      

      3.通过function定义的类,它的父类是Function

      

 

      4.所有示例对象的__proto__都指向父类的原型prototype

       

      

  对象.属性

   首先看对象中私有的属性中有没有设个属性,有就直接用,没有就使用__proto__向他的父类的原型(prototype)上查找

posted @ 2019-07-15 20:07  前端学习者6  阅读(2485)  评论(0编辑  收藏  举报