为了账号安全,请及时绑定邮箱和手机立即绑定

es6默认值问题求解答!

es6默认值问题求解答!

慕桂英4014372 2019-10-25 23:06:35
es6在函数参数中添加默认值,给其中一个参数赋值,有无默认值为什么arguments的输出结果会受到影响?constfn1=function(a=7,b=8,c=9){a=10;console.log(arguments)}constfn2=function(a,b,c){a=10;console.log(arguments)}fn1(1,2,3);//输出结果:[1,2,3]fn2(1,2,3);//输出结果:[10,2,3]这个输出结果我很费解,求告知。
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

javascript里的arguments分两种,mapped和unmapped。
对于mappedarguments,对arguments的元素会映射到实参。于是实参赋值会影响arguments,对arguments的元素赋值会影响实参。
unmappedarguments没有这种映射,对arguments以及对参数的赋值互不影响。
只有在非严格模式,简单参数列表的时候,才提供mappedarguments。其他时候,arguments都是unmapped。所谓简单参数列表,指参数列表不包含解构参数,rest参数(,...a)),以及默认值。
所以,正是默认值影响了arguments的类型。没有默认值时,arguments是mapped;有了默认值,arguments是unmapped。从而导致了对实参的赋值(a=10;)对arguments内容带来了不同的影响。
arguments构建的具体算法包含在ecma262的FunctionDeclarationInstantiation方法中,想详细了解可以去看一下。
                            
查看完整回答
反对 回复 2019-10-25
  • 2 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号