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

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]
这个输出结果我很费解,求告知。
拉风的咖菲猫
浏览 210回答 2
2回答

牛魔王的故事

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方法中,想详细了解可以去看一下。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript