js 之 函数参数 (扩展:展开运算符)、箭头函数(ES6)

函数参数:

1、动态参数

arguments 是函数内部内置的伪数组变量,它包含了调用函数时传入的所以实参

function getSum() {
            // arguments 只存在于函数里面  伪数组
            console.log(arguments)  // [2,3,4]
        }
        getSum(2, 3, 4)
  function getSum() {
            let sum = 0
            //遍历数组
            for (let i = 0; i <= arguments.length; i++) {
                sum += arguments[i]
            }
            console.log(sum)
        }
        getSum(2, 3, 4)  //9

2、剩余参数

剩余参数允许我们将一个不定数量的参数表示为一个数组

主要使用场景:置于最末函数形参之前,用于获取多余的实参

借助 ...获取的剩余实参,是一个真数组

 function getSum(a, b, ...arr) {
            console.log(arr) //[3,4]
        }
        getSum(1, 2, 3, 4)  

知识点:伪数组

  1. 伪数组是一个对象(Object),而真实的数组是一个数组(Array)
  2. 拥有length属性,且必须是number类型,其它属性(索引)为字符串
  3. 不具有数组所具有的方法,forEach()等,不过有Object的方法
  4. 伪数组长度不可变,真数组长度可以变
  5. 可以通过for in遍历

常见的伪数组:

  1. 参数数组:arguments
  2. DOM对象列表HTMLCollection():比如通document.getElementsByTagName得到的列表
  3. jquery对象:比如$(“div”)

注意:剩余参数与展开运算符的区别

剩余参数:函数参数使用,得到真数组

展开运算符:

扩展运算符对对象实例的拷贝属于浅拷贝

对象展开运算符用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。

let bar = { a: 1, b: 2 }
        let baz = { ...bar } // {a:1,b:2}
        //等价于
        let bar2 = { a: 1, b: 2 }
        let baz2 = Object.assign({}, bar)// {a:1,b:2}

 

注意:如果用户自定义的属性,放在扩展运算符后面,则扩展运算符内部的同名属性会被覆盖 

 let bar = { a: 1, b: 2 }
        let baz = { ...bar, ...{ a: 2, b: 4 } }  // { a: 2, b: 4 

 

 数组扩展运算符可以将一个数组转为用逗号分隔的参数序列,且每次只能展开一层数组。

 console.log(...[1, 2, 3])
        //1 2 3
        console.log(...[1, [2, 3, 4,], 5])
        //1 [2,3,4,] 5

以下常用场景:

const arr = [1, 2, 3]
        console.log(...arr)  // 1 2 3   把数组展开

        // 展开运算符典型运用场景
        // 1、求最值
        console.log(Math.max(...arr))  //3
        console.log(Math.min(...arr))
        
        //2、合并数组
        const arr2 = [3, 4, 5]
        const arr1 = [...arr, ...arr2]
        console.log(arr1)  // [1,2,3,3,4,5]

 扩展运算符用于取出参数对象(这里指数组)中的所有可遍历属性,拷贝到当前对象之中,

    // 3、将数组转换为参数序列
        function add(x, y) {
            return x + y
        }
        const num = [1, 2]
        add(...num) //3

 
    //4、扩展运算符与解构赋值结合起来,用于生成数组
        // 注意:扩展运算符只能放在参数的最后一位,否则报错
        const [first, ...rest] = [1, 2, 3, 4, 5]
        console.log(first) // 1
        console.log(rest)  // [2,3,4,5]


    //5、将字符串转为真正的数组
        [...'hello']  //["h", "e", "l", "l", "o"]


    //6、将某些数据结构转为数组
        function foo() {
            const args = [...arguments]  //arguments对象
        }

 

箭头函数 :

使用场景:更适用于那些本来需要匿名函数的地方

// 基本语法
        const fn = (x) => {
            console.log(x)  //2
        }
        fn(2)

        // 只有一个形参时,可以省略小括号
        const fn1 = x => {
            console.log(x)  //2
        }
        fn(2)

        // 只有一行代码时,可以省略大括号
        const fn2 = x => console.log(x)  //2
        fn(2)

        //只有一行代码时,可以省略 return
        // 基本语法
        const fn3 = x => x + x
        console.log(fn3(2))  //4

 

箭头函数可以直接返回一个对象

  const fn = uname => ({ uname: uname })
        console.log(fn('Linsir'))

 

箭头函数参数:没有prototype(不能new一个箭头函数)

没有arguments动态参数,但有剩余参数 ... 

 const getSum = (...arr) => {
            let sum = 0
            for (let i = 0; i <= arr.length; i++) {
                sum += arr[i]
            }
            return sum
        }
        const result = getSum(2, 3)
        console.log(result) //5

 

箭头函数的 this 指向:

箭头函数不会创建自己的 this ,它只会从自己的作用域链的上一层沿用 this

DOM事件回调函数 使用箭头函数时,this 为全局的 window

 const obj = {
            uname: 'linsir',
            sayHi: () => {
                console.log(this) //window
            }
        }
        obj.sayHi()

 

 const obj2 = {
            uname: 'linsir',
            sayHi: function () {
                console.log(this) //obj2
                let i = 10
                const count = () => {
                    console.log(this) //obj2
                }
              count()
            }
        }
        obj2.sayHi()

call() 、apply() 、bind() 等方法不能改变箭头函数中this 的指向 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linsir 一啵叶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值