老师,问题请看注释

来源:5-1 函数扩展之默认参数

hyperse

2020-06-16 01:16:32

//在调用时给实参name:3

function People2({name,age = 38} = { name :1}){  //age=38是解构赋值时的默认值吗?name:1也是是要解构的对象的默认值?那如果等号右边的花括号里面也有age=20的话,调用函数时没有传入实参,是等号哪边的默认参数值生效呢?

console.log(name,age);  //3 38

}

People2({name:3});


写回答

2回答

好帮手慕夭夭

2020-06-17

同学你好,可以这样理解:

左侧定义的是对象是参数,里面定义的name,age相当于一个变量,那么变量赋值使用的是等号。而右侧是参数的值,那么这个值是一个对象,对象中的属性和属性值本身就需要使用冒号隔开。这就和我们平时定义对象一样,例如如下:

http://img.mukewang.com/climg/5ee974d7097d945301780104.jpg

当为这个对象解构赋值时,左侧对象中,定义的是变量,变量设置值就是用等号。

http://img.mukewang.com/climg/5ee9750109a609cb02690048.jpg

但是你把对象中属性值和属性名使用等号隔开,语法就不对了:

如下语法不对

http://img.mukewang.com/climg/5ee9753609ff6dc102260098.jpg

其他的地方没有了,理解了这一块就行。

祝学习愉快~

1

好帮手慕夭夭

2020-06-16

同学你好,理解的都正确。另外,最后一个疑问,是可以通过自己动手测试解决的。在学习时,遇到问题,一定要去测试,提升自己的动手实战能力和独立解决问题的能力,这会对自己是一个很大的提升哦。以下是测试代码,建议同学自己也去测试一下:

http://img.mukewang.com/climg/5ee82b64093d3cb006040100.jpg

注意左侧是单独给某一个属性赋值,所以使用了等号,但是右侧是一个对象,整个对象是默认值,所以对象中的属性与属性值是用冒号隔开的。测试结果如下:

http://img.mukewang.com/climg/5ee82baa0900750202010035.jpg

如果整个参数,即这个对象设置了默认值,那么生效的就是右侧的值。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~


0
hyperse
h 谢谢老师,我才发现左边是等号,右边是冒号。那这两个都是设置的默认值,为什么符号又不一样呢?是不是还是有哪里不一样呀,等号左边和右边设置的默认值,只是写法不同吗
h020-06-16
共1条回复

0 学习 · 10739 问题

查看课程