JS中箭头函数与this的写法和理解

JS中箭头函数与this的写法和理解是一个非常重要的问题,因为箭头函数的this规则和普通函数有所不同,如果不理解它的具体规则,就容易出现一些令人困惑的问题。下面就是一份关于箭头函数和this的完整攻略。

箭头函数的基本语法

箭头函数是在ES6中引入的一种语法,它是一种特殊的函数,它有以下的形式:

(parameter1, parameter2, ..., parameterN) => { statements }

箭头函数的语法比较简单,它只有一个表达式,并且这个表达式会自动作为函数的返回值。当函数体只有一个表达式的时候,可以省略花括号 {} 和return关键字。

(parameter1, parameter2, ..., parameterN) => expression;

当前只有一个参数的情况下,可以省略掉括号。

parameter => expression;

如果箭头函数没有参数,需要使用一对空的括号。

() => { statements }

this的基本概念

在JavaScript的函数中,this是一个非常关键的概念,它通常用来引用当前的执行上下文。在箭头函数中,this的值也是非常重要的,因为它的值不像普通的函数那样,由函数被调用的方式来决定,而是由定义时的上下文来决定。

在JS中,this可以指向以下几个对象:

  • 全局对象
  • 当前对象
  • 新创建的对象
  • 显式指定的对象

在普通函数中,this的值是根据函数的调用方式来确定的。举个例子,下面这个函数将会输出全局对象:

function foo() {
  console.log(this);
}

foo();

而在箭头函数中,this的值是在函数定义时确定,而不是在函数被调用时确定,因为箭头函数没有自己的this,它会继承它的父级上下文的this。

箭头函数中的this

在箭头函数中,this的值是在函数定义时确定的,而不是在函数被调用时确定的。下面是一个例子,可以说明箭头函数中的this:

let person = {
  name: 'Tom',
  sayName: () => {
    console.log(this.name);
  }
}

person.sayName();

上面的代码将会输出 undefined。因为sayName函数的this是在定义时就被确定了,并且它指向了全局对象window,而非person对象。

因此箭头函数是不能被作为构造函数使用的,因为它不会创建一个新的对象。

箭头函数不能使用call、apply、bind方法,因为这些方法在ES5中被用于改变函数执行时期的this值。

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

除了this的不同,箭头函数还有以下与普通函数不同:

  1. 没有自己的this对象
  2. 不能用作构造函数,不能使用new命令
  3. 没有原型
  4. 不可以改变this指向,即不能使用call()、apply()、bind()这些方法

那么下面的示例案例,就可以更好的理解普通函数与箭头函数的不同:

// 定义一个对象
let person = {
  age: 25,

  // 普通函数
  sayAge: function() {
    console.log(this.age);
  },

  // 箭头函数
  sayAgeArrow: () => {
    console.log(this.age);
  }
};

// 调用普通函数
person.sayAge(); // 输出25

// 调用箭头函数
person.sayAgeArrow(); // 输出undefined

上面的代码中,普通函数 sayAge 内的 this 指向了当前的对象 person,而箭头函数 sayAgeArrowthis 指向了全局对象。因此,当 sayAgeArrow 函数被调用时,它输出的是 undefined

注意事项

虽然使用箭头函数可以减少一些代码量,但是在实际的开发中,还是需要注意以下几点:

  1. 箭头函数不能作为构造函数,可以使用普通函数来作为构造函数。
  2. 箭头函数不能被当作方法使用,因为它没有自己的this对象,this指向了上层作用域。
  3. 箭头函数中的arguments关键字会继承上层作用域中的arguments。
  4. 箭头函数不能使用ES5的call、apply和bind方法给this指向赋值,但可以使用展开操作符或者数组的解构来传递参数。

示例说明

下面是两个示例,用于说明箭头函数和this的规则:

示例一:简单的箭头函数

let person = {
  name: 'Tom',
  sayName: () => {
    console.log(this.name);
  }
}

person.sayName();

上面的代码将会输出 undefined,因为箭头函数中的this指向了全局对象,而非person对象。

示例二:箭头函数作为事件处理程序

<button id="myButton">点击我</button>
let myButton = document.getElementById('myButton');

myButton.addEventListener('click', () => {
  console.log(this); // 输出 Window 对象
});

上面的代码中,箭头函数用作事件处理程序。在事件处理程序中,箭头函数的this值指向了全局对象window,而不是事件的目标元素myButton。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中箭头函数与this的写法和理解 - Python技术站

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

相关文章

  • JavaScript中setTimeout()的具体用法

    当我们需要在一段时间之后执行一些代码时,就可以使用JavaScript中的setTimeout()函数。setTimeout()在指定时间段后会执行一段代码。以下是setTimeout()函数的语法: setTimeout(function, milliseconds, param1, param2, …) 其中,第一个参数为需要执行的函数,第二个参数为…

    JavaScript 2023年6月10日
    00
  • js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解

    当我们在编写JavaScript时,常常需要处理字符串。在这个过程中,我们可能需要对字符串进行编码以保证其正确解析。以下是escape()、encodeURI()和encodeURIComponent()编码函数的详解和区别: escape() escape()函数将字符串转换为UTF-8编码格式,并将一些特殊字符,例如@、空格、+、/、:、等符号转换为十六…

    JavaScript 2023年5月20日
    00
  • js借助ActiveXObject实现创建文件

    使用JavaScript创建文件通常需要依靠 ActiveXObject 对象,这个对象是一个被 Internet Explorer 浏览器支持的特殊的对象,可以用于访问本地文件系统。下面是使用 ActiveXObject 对象实现创建文件的详细攻略: 1. 创建 ActiveXObject 对象 JavaScript 中可以使用 “new ActiveXO…

    JavaScript 2023年5月27日
    00
  • js动画效果制件让图片组成动画代码分享

    下面是关于“js动画效果制件让图片组成动画代码分享”的完整攻略。 一、什么是JS动画效果制件 JS动画效果制件是一种用JavaScript创建动画效果的工具,它可以帮助用户更轻松、更高效地制作出丰富多彩的动画效果,同时可以通过代码进行完全自定义。 常见的JS动画效果制件包括jQuery中的animate()方法、GreenSock Animation Pla…

    JavaScript 2023年6月10日
    00
  • JavaScript实现简易轮播图最全代码解析(ES5)

    JavaScript实现简易轮播图最全代码解析(ES5)的完整攻略如下: 什么是轮播图 轮播图(Carousel,Slider)是网站常见的一种幻灯片效果,通常用于展示多张图片或信息。轮播图可以让页面更具有动感,是提升用户体验的一种有效方式。 为什么要用 JavaScript 实现轮播图 JavaScript 是网页开发中的一种非常重要的脚本语言,可以实现网…

    JavaScript 2023年6月11日
    00
  • Bootstrap源码解读表单(2)

    关于“Bootstrap源码解读表单(2)”这篇文章,主要是对Bootstrap框架中的表单组件的源码分析和实现方法进行了详细讲解。下面是我对这篇文章的完整攻略: 简介 此文章是 Bootstrap 源码解读系列的第 2 篇,主要介绍如何自定义表单组件,以及其中用到的几个重要的 CSS 类。 自定义表单组件 Bootstrap 的表单组件样式是十分灵活的,可…

    JavaScript 2023年6月10日
    00
  • JavaScript 五大常见函数

    JavaScript 五大常见函数 在 JavaScript 编程中,有五大常见函数,它们分别是:parseInt()、parseFloat()、isNaN()、toFixed() 和 toString()。下面我们将结合代码示例来详细讲解这五大常见函数。 parseInt() parseInt() 方法将一个字符串进行解析,返回整数值。 // 示例1 le…

    JavaScript 2023年5月18日
    00
  • JavaScript代码优雅,简洁的编写技巧总结

    那么现在我将分享“JavaScript代码优雅,简洁的编写技巧总结”的攻略。 减少嵌套 嵌套层数过多的代码通常会让代码难以阅读和理解。因此,我们可以通过减少嵌套来提高代码的可读性和可维护性。 比较嵌套版本: function calculateTotal(users) { var total = 0; for (var i = 0; i < users…

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