函数参数解构赋值

Posted shyno

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数参数解构赋值相关的知识,希望对你有一定的参考价值。

解构赋值运用到函数参数上,减少了一些操作同时也增加了一些麻烦.

1.函数参数

let a={name:‘小明‘,age:18}
function wuKongYouLook(b){
console.log(b)
}
wuKongYouLook(a)//{name:‘小明‘,age:18}
wuKongYouLook() //undefined

 

我们可以理解成函数在声明的时候,如果有一个形参b,则在调用的时候声明了一个局部变量b,所以即使没有传参,也只是没有值,即undefined.

而传实参,则相当于又多了个b=a这个赋值的过程,所以函数后续的代码虽然使用变量b,但实际在操作a的值.

2.形参默认值

let a={name:‘小明‘,age:18}
function wuKongYouLook(b={}){
console.log(b)
}
wuKongYouLook(a)//{name:‘小明‘,age:18}
wuKongYouLook() //{} 

 

也就是说,当b=a这一步失败时,则b取其默认值.这一点很重要 

 

3.函数参数解构赋值

let a={name:‘小明‘,age:18}
    function wuKongYouLook({name,age}){
      console.log(name,age)
      }
      wuKongYouLook(a)//小明,18
      wuKongYouLook() //报错  
//这里实际上是省略了一步,let {name,age} =a;即 let 形参 = 实参,所以就可以打印出name,age的值.而不给参数或者参数是undefined时,let {name,age}=null或者undefined都会报错 

故,我们需要给个默认值

let a={name:‘小明‘,age:18}
    function wuKongYouLook({name,age}={}){
      console.log(name,age)
      }
      wuKongYouLook(a)//小明,18
      wuKongYouLook() //undefined,undefined
//同理,当let {name,age} =null或者undefined时,系统要报错,但是这时它发现参数有默认值,于是就变成了let {name,age} = {},空对象是可能有name属性的,那就没错,去找找看,没有,那就返回undefind. 

  

设置几种默认值的陷阱,很容易出错

(1)形参整体设置默认值

上面那个例子就是,在等号的右边设置想要的默认值

let a={name:‘小明‘,age:18}
    function wuKongYouLook({name,age}={name:‘shyno‘,age:18}){
      console.log(name,age)
      }
      wuKongYouLook(a)//小明,18                       let {name,age}={name:‘小明‘,age:18}
      wuKongYouLook({name:‘小红‘}) //小红,undefinded  let {name,age} = {name:‘小红‘}
      wuKongYouLook({})    //undefined,undefined     let {name,age} = {}
      wuKongYouLook() //shyno,18                     let {name,age} = {name:‘shyno‘,age:18} 

原理还是一样,先看看有没有实参.除了最后一次调用,都有实参.所以,只有最后一次打印了默认值,即{name:‘shyno‘,age:18}.其他的都是解构了实参

(2)形参解构赋值时设置默认值

let a={name:‘小明‘,age:18}
    function wuKongYouLook({name=‘shyno‘,age=17}={}){
      console.log(name,age)
      }
      wuKongYouLook(a)//小明,18                       let {name=‘shyno‘,age=17} = {name:‘小明‘,age:18}
      wuKongYouLook({name:‘小红‘}) //小红,17          let {name=‘shyno‘,age=17} = {name:‘小红‘}
      wuKongYouLook({})    //shyno,17                 let {name=‘shyno‘,age=17} = {}
      wuKongYouLook() //shyno,17                     let {name=‘shyno‘,age=17} = null或者undefined

 

  

以上是关于函数参数解构赋值的主要内容,如果未能解决你的问题,请参考以下文章

函数参数的解构赋值

函数参数解构赋值

35.JavaScript对象和数组的解构赋值基础详解let陷阱函数参数解构

ES6---解构赋值(数组对象字符串数值和布尔值函数参数)

ES6 函数参数的解构赋值

ES6解构赋值-函数篇