• 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
  • 相关阅读:
    函数参数的讨论
    redirect-windows-cmd-stdout-and-stderr-to-a-single-file
    rust 多文件工程
    rust: 默认初始化,函数重载
    VSCode如何格式化所有文件
    FLV协议5分钟入门浅析
    WebRTC:数据传输相关协议简介
    WebSocket协议:5分钟从入门到精通
    Nodejs进阶:crypto模块中你需要掌握的安全基础知识
    前端进阶之路:如何高质量完成产品需求开发
  • 原文地址:https://www.cnblogs.com/ayseeing/p/11596182.html
Copyright © 2020-2023  润新知