我的编程笔记
  • 云胡的编程笔记
  • 后端
    • Spring Boot 配置 MySQL 数据库
    • MyBatis-Plus 实现增删改查操作
    • Java 后端将上传的 csv 文件转为 Excel xlsx 文件
  • JavaScript
    • JavaScript 三种循环方法
    • JavaScript 箭头函数
    • JavaScript 高阶函数
    • JavaScript 变量作用域
    • JavaScript 操作 DOM
  • Vue3
    • Vue3 搭配 Element-Plus
    • Vue3 实现路由跳转
    • Vue3 上传 Excel 文件
  • Cpp
    • C++ Vector 易错点
  • Qt
    • Qt 实时显示鼠标位置
  • Python
  • 编辑器
    • Visual Studio Code 使用
  • 其他
    • 网站和软件推荐
  • 数据结构与算法
由 GitBook 提供支持
在本页
  • 一、概述
  • 二、箭头函数 this 绑定问题
在GitHub上编辑
  1. JavaScript

JavaScript 箭头函数

一、概述

1.1 定义一个简单的箭头函数:

x => x * x

等价于:

function (x) {
    return x * x;
}

1.2 不同参数的箭头函数

// 没有参数
var f1 = () => 3.14;
console.log(f1()); // output: 3.14

// 一个参数
var f2 = x => x * x;
console.log(f2(5)); // output: 25

// 两个参数
var f3 = (x, y) => x * x + y * y;
console.log(f3(6, 8)); // output: 100

// 可变参数
var f4 = (x, y, ...rest) => {
    var i, sum = x + y;
    for (i = 0; i < rest.length; i++) {
        sum += rest[i];
    }
    return sum;
}

console.log("sum = " + f4(1, 2, 3, 4, 5)); // output: sum = 15

// 返回对象字面量表达式,细节外层大括号变为小括号,然后对象用大括号表示
var f5 = x => ({ foo: x+2 });
console.log(f5(20)); // output: {"foo": 22}

二、箭头函数 this 绑定问题

2.1 this 绑定有误

var obj = {
    birth: 1997,
    getAge: function () {
        var b = this.birth; // 这个 this 指向 obj 所以获取到 1997
        var fn = function () {
            return new Date().getFullYear() - this.birth; // 这个 this 指向 window, 获取不到值
        };
        return fn();
    }
};

// fn 函数中 this 指向 window 
console.log(obj.getAge()); // output: NaN 

普通函数 fn的 this会指向 window,因此获取不到我们想要的结果。

2.2 通过引入一个 that 变量保存 this 值

var obj = {
    birth: 1997,
    getAge: function () {
        var b = this.birth; // 这个 this 指向 obj 所以获取到 1997
        var that = this;    // 用 that 保存 this 的值
        var fn = function () {
            return new Date().getFullYear() - that.birth; // 这个 that 指向 obj,可以获取到值
        };
        return fn();
    }
};

console.log(obj.getAge()); // output: 25 

2.3 通过箭头函数

var obj = {
    birth: 1997,
    getAge: function () {
        var b = this.birth; // 1997
        var fn = () => new Date().getFullYear() - this.birth; // this 指向 obj 对象
        return fn();
    }
};

console.log(obj.getAge()); // 25

箭头函数不会创建自己的 this, 它只会从自己的作用域链的上一层继承 this,这个例子中就是 obj 对象。

上一页JavaScript 三种循环方法下一页JavaScript 高阶函数

最后更新于3年前