es6和es5函数参数和arguments的差别

注: 这里说的 es5 代表的都是非严格模式下。

 

es6之前函数的参数不能传默认值:
function fn(a, b){
    console.log(a)
    console.log(b)
}
fn(2)
// 2
// undefined

如果调用函数的时候传不传入对应的参数,则参数的值为 undefined。

 

 

es6中查参数可以设置默认值,且默认值可以是任何类型(变量,数字、函数等)。

 

默认值为数字、字符串等非函数和变量:
function fn(a, b=3){
    console.log(a)
    console.log(b)
}

fn(2)
// 2
// 3

 

默认值为变量:
let d = 5;
function fn(a, b=a, c=d){
    console.log(a)
    cosnole.log(b)
    cosnole.log(c)
}
fn(2)
// 2
// 2
// 5

注意:默认值是变量且变量也是当前函数的参数的话,不能将后面的变量赋值给前面的参数当默认值,如上面代码,能将参数 a 赋值给 b ,但是不能将 b 赋值给 a 。

 

 

默认值为函数:
function testfn(){
    return 'test'
}
function fn(a, b=testfn()){
    console.log(a)
    console.log(b)
}
fn(2)
// 2
// test

注意,默认值如果是函数的话,只有在调用 fn 函数,且未传值的时候,才会调用。

 

 

es6和es5函数 arguments 的差别:

arguments 是函数传入的实参,在es6中,如果函数有设置默认值,那么修改参数变量的值,不会影响 arguments 里面值,如:

function fn(a, b=5){
    a = 3;
    console.log(a)
    console.log(arguments[0])
}
fn(2)
// 3
// 2

这里,我在函数内部将参数 a 的值改成了 3,但是arguments[0] 的值还是传入的2。

 

如果定义函数的时候,没有设置默认值,那么修改参数的值会导致 arguments 里面的值同步被修改,如:

function fn(a, b){
    a = 3;
    console.log(a)
    console.log(arguments[0])
}
fn(2)
// 3
// 3

 

转载于:https://www.cnblogs.com/ayseeing/p/11596182.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值