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 回答
FFIVE
TA贡献1797条经验 获得超6个赞
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方法中,想详细了解可以去看一下。
添加回答
举报
0/150
提交
取消