JS 箭头函数的this指向详解

yizhihongxing

JS 箭头函数的this指向详解

在 JavaScript 中,this是一个非常重要的概念,它代表函数执行时的上下文。而箭头函数作为 ES6 新增的特性之一,虽然与普通函数有些相似之处,但它的this指向却有着很大的不同之处。

箭头函数与普通函数的区别

语法

箭头函数的语法比普通函数更简洁,可以帮助我们更加快速地书写代码,同时也可以减少代码中this指向发生变化的情况。

// 普通函数
function add(a, b) {
  return a + b;
}

// 箭头函数
const add = (a, b) => a + b;

this指向

与普通函数不同,箭头函数没有自己的this值,它的this会继承外层作用域的this

// 普通函数中的this
const obj = {
  name: "Alice",
  sayHi: function () {
    console.log(`Hi, I'm ${this.name}.`);
  },
};
obj.sayHi(); // Hi, I'm Alice.

// 箭头函数中的this
const obj = {
  name: "Alice",
  sayHi: () => {
    console.log(`Hi, I'm ${this.name}.`);
  },
};
obj.sayHi(); // Hi, I'm undefined.

在箭头函数中,this被继承自外层作用域,也就是全局作用域。所以此时this.name实际上是 undefined。

需要注意的是,使用箭头函数并不代表所有情况下都适用,特别是当需要动态绑定this时,我们需要使用普通函数。

箭头函数中的this指向

在理解箭头函数的this指向时,主要分为两种情况讨论:全局作用域下的箭头函数和对象方法中的箭头函数。

全局作用域下的箭头函数

在全局作用域下定义一个箭头函数时,此时它的this指向的是全局对象window

const func = () => {
  console.log(this === window); // true
};
func();

这是因为箭头函数并没有改变this的指向,它的this与最近的普通函数或全局作用域是相同的。此时,最近的普通函数或全局作用域就是全局作用域。

对象方法中的箭头函数

在对象方法中使用箭头函数时,此时它的this指向的是该方法所属的对象。

const obj = {
  name: "Alice",
  sayHi: () => {
    console.log(`Hi, I'm ${this.name}.`);
  },
};
obj.sayHi(); // Hi, I'm undefined.

const obj2 = {
  name: "Bob",
  sayHi: function () {
    console.log(`Hi, I'm ${this.name}.`);
  },
};
obj2.sayHi(); // Hi, I'm Bob.

在第一个例子中,因为箭头函数的this并没有指向obj,而是指向了最近的全局作用域。所以此时this.name是 undefined。而在第二个例子中,因为该函数是普通函数而非箭头函数,它的this指向对象obj2

示例说明

下面的示例说明了箭头函数在不同情况下的this指向。

示例一:定义在全局作用域的箭头函数

const func = () => {
  console.log(this === window); // true
};
func();

该例子定义了一个箭头函数func,该函数定义在全局作用域下,因此该函数中的this指向的是全局对象window。执行该函数后,控制台会依次输出true

示例二:在对象方法中定义箭头函数

const obj = {
  name: "Alice",
  setName: function (name) {
    const set = () => {
      this.name = name;
    };
    set();
  },
};
console.log(obj.name); // Alice
obj.setName("Bob");
console.log(obj.name); // Bob

该例子定义了一个对象obj,该对象包含一个属性name和一个方法setName。在方法setName中,定义了一个箭头函数set,该函数将obj对象的name属性的值修改为传入的name值。通过调用对象方法setName("Bob"),成功将objname属性修改为 Bob。

结语

总而言之,箭头函数是一种有着自己独特特性的函数,它的this指向与普通函数有着很大不同。虽然使用起来很方便,但在某些特定的场景下会出现一些问题。因此,在使用时,我们需要充分理解箭头函数的特性,结合具体的场景进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS 箭头函数的this指向详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 梳理总结JavaScript的23个String方法

    下面是一份详细的攻略,可能会有点长,请您慢慢阅读。 梳理总结JavaScript的23个String方法 String.prototype.charAt() 此方法用于返回指定位置的字符。下面是一个示例: const str = "hello"; const char = str.charAt(2); // ‘l’ 这个示例中,我们从字符…

    JavaScript 2023年5月19日
    00
  • js事件on动态绑定数据,绑定多个事件的方法

    JavaScript中的事件机制是常见的Web前端开发基础,通过on事件可以实现动态绑定事件,并绑定多个事件,以下是详细的攻略: 1. on动态绑定数据 on事件可以通过DOM元素的属性方式进行设置,同时这个属性名称也必须遵循on开头的规则,如onclick、onload等。此外,我们还可以利用JavaScript的编程方式来实现事件的绑定。 以下是一个基本…

    JavaScript 2023年6月11日
    00
  • JS实现统计字符串中字符出现个数及最大个数功能示例

    下面我将详细讲解“JS实现统计字符串中字符出现个数及最大个数功能示例”的完整攻略。 1. 需求分析 在实现统计字符串中字符出现个数及最大个数功能之前,我们首先需要明确需求。具体来说,我们需要实现以下功能: 统计字符串中每个字符出现的个数; 找出出现次数最多的字符及其出现次数。 2. 实现思路 基于以上需求,我们可以采用以下步骤来实现: 遍历字符串中的每个字符…

    JavaScript 2023年5月28日
    00
  • 区分中英文字符的两种方法(正则和charCodeAt())

    区分中英文字符是一个十分常见的需求,下面我将介绍两种常用的方法,分别是正则表达式和charCodeAt()方法。 使用正则表达式 匹配单个中文字符 要匹配单个中文字符,我们需要使用Unicode中文编码范围来进行匹配,中文字符的Unicode编码范围为\u4e00-\u9fa5。因此,我们可以使用如下的正则表达式: /^[\u4e00-\u9fa5]$/ 这…

    JavaScript 2023年6月10日
    00
  • JavaScript中错误正确处理方式小结你用对了吗

    让我来详细讲解一下 “JavaScript中错误正确处理方式小结你用对了吗” 这个话题。 标题 JavaScript中错误正确处理方式小结你用对了吗 简介 在JavaScript中,错误处理一直是一个非常重要的主题。如果没有适当的错误处理,代码可能会运行失败或者执行不完整。因此,正确处理错误是每个JavaScript开发人员的必修课程。 常见错误类型 在Ja…

    JavaScript 2023年5月28日
    00
  • JS操作JSON常用方法(10w阅读)

    JS操作JSON常用方法攻略 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,其基于JavaScript语言的子集,易于人阅读和编写,同时也易于机器解析和生成。 JSON格式的数据由键值对组成,键值对之间使用英文半角逗号(,)分隔,最外层用一对大括号({})包裹,每个键值对由一个键和一个值组成,键…

    JavaScript 2023年5月27日
    00
  • C# DropDownList中点击打开新窗口的方法

    下面是“C# DropDownList中点击打开新窗口的方法”的完整攻略。 1. 确定目标页面和传递参数 首先需要确定要打开的目标页面以及要传递给目标页面的参数,例如,我们要打开的目标页面为“TargetPage.aspx”,要传递的参数为“id=123”。 2. 将DropDownList设置为自动PostBack模式 为了使DropDownList选择项…

    JavaScript 2023年6月11日
    00
  • JavaScript登录记住密码操作(超简单代码)

    让我为您详细讲解“JavaScript登录记住密码操作(超简单代码)”的完整攻略。 1.什么是“JavaScript登录记住密码操作”? “JavaScript登录记住密码操作”是在网站的登录页面上,用户可以选择“记住密码”选项,让网站记住用户的账号和密码,下次再登录时可以自动填充账号和密码,方便用户登录。 2.如何实现“JavaScript登录记住密码操作…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部