Skip to content

箭头函数

  • 箭头函数是ES6之后增加的一种编写函数的方法,并且它比函数表达式要更加简介:
    • 箭头函数不会绑定this、arguments属性
    • 箭头函数布恩那个作为构造函数来使用(不能和new一起来使用,会抛出错误)
js
    // 1. 之前的方式
    function foo1() {}
    let foo2 = function(name, age) {
        console.log("函数体代码")
    }

    // 2. 箭头函数完整写法
    let foo3 = (name, age) => {
        console.log("箭头函数的函数体")
    }

箭头函数的简写优化

1.如果箭头函数只有一个参数,那么()可以省略

js
    names.forEach(item => {
        console.log(item)
    })
js
    let evenNum = nums.filter(item => {
        return item % 2 === 0
    })
    console.log(evenNum)

2.如果函数执行体中只有一行代码,那么可以省略大括号

一行代码中不能带return关键字,如果省略,需要带return一起省略(下一条规则)

js
    names.forEach(item => console.log(item))

3.只有一行代码时,这行代码的表达式结果会作为函数的返回值默认返回

js
    let evenNum = nums.filter(item => item % 2 === 0)
    console.log(evenNum)

4.如果函数执行体只有返回一个对象,那么需要给这个对象加上()

注意:在redux中重要,经常使用

js
    let fn = () => ({ name: "lwt" })
    console.log(fn())

练习:求数组中所有偶数平方的和

js
    let num = [20, 30, 11, 15, 111]
    let res = num.filter(item => item % 2 === 0)
                          .map(item => item *  item)
                          .reduce((prevValue, item) => prevValue + item)
    console.log(res)

箭头函数中的this使用

箭头函数中,压根没有this

  • 因为箭头函数中没有this,所以它的this查找规则就是找上一层作用域的this(非常重要!!!)

  • 对象内部不算一个代码块,更不算一个作用域,只有函数才是