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

es6默认值问题求老司机指点!

es6默认值问题求老司机指点!

拉风的咖菲猫 2019-10-16 17:03:03
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 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

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-16
  • 2 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信