function值传着传着没了。。。ES6中的解构赋值

​今天项目经理说有一个问题,一个调了好几个接口的按钮报错了,赶紧打开看看,别人的代码,看起来还是有点麻烦,代码逻辑简化之后就如下面:

function fn(){
    let a = {s:1};
    let b = [{aa:1231}];
    return{a,b};
}
function fn1(c,d){
    fn2({c,d});
}
function fn2({a,b}){
	console.log(a,b); //undefined undefined
}
function run(){
    let {a,b} = fn();
    fn1(a,b)
}
run();

​第一眼看过去,没什么问题呀,打印出来的a,b都是undefined,定睛一看,fn2传入的参数是对象,a,b只是对象的元素,在fn1里面调用fn2时传的也是对象,只是里面的元素是c,d,那么在fn2中怎么可能拿得到a,b的值。

补充一下,这个是ES6中的解构赋值。
解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象

  • 数组:本质上,只要等号两边模式一致,左边变量即可获取右边对应位置的值
let [a, b] = [1, 2]; //1 2
let [a,...b] = [1,2,3]; // 1 [2,3]
let [a,b,..c] = [1]; // 1 undefined []
  • 对象:对象解构不需要严格按照顺序取值,而只要按照变量名去取对应属性名的值,若取不到对应属性名的值,则为undefined
let {a,b} = {a:1,b:2};//1 2
let {a:b} = {a:1,b:2};//b=>2 a报错
  • 函数
function fun ({a=0, b=0} = {}){
    return [a, b];
}
fun ({a:1, b:2}); // [1, 2]
fun ({a:1});      // [1, 0]
fun ({});         // [0, 0]
fun ();           // [0, 0]
// 返回一个对象
function f (){
    return {a:1, b:2};
}
let {a, b} = f();// a=>1, b=>2
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值