js中什么时候不能使用箭头函数

yizhihongxing

使用箭头函数的时候需要注意一些使用限制,下面详细讲解什么时候不能使用箭头函数以及注意事项。

不能使用箭头函数的情况

1. 不能作为构造函数

箭头函数不能作为构造函数,也就是不能使用 new 关键字创建对象。因为箭头函数没有自己的 this,也没有 prototype 属性。所以,如果你尝试使用 “箭头函数” 作为构造函数,则会产生异常。

// 箭头函数不能作为构造函数
const Person = (name) => {
  this.name = name; // TypeError:Cannot set property 'name' of undefined
}
const p = new Person('Tom'); // TypeError: Person is not a constructor

2. 无法绑定 this

箭头函数的 this 是取决于定义它的代码环境,而不是运行时。在一些场景下,可能不希望使用箭头函数,比如需要动态绑定this或者需要在回调函数中使用 this。所以在这种情况下,不能使用箭头函数。

// 无法绑定this的情况
const obj = {
  name: 'Tom',
  sayHi: () => {
    console.log(`Hello, ${this.name}`); // 在箭头函数中使用this, this指向的是调用该函数的上下文,发现这里的 this 指向的是词法作用域上面的obj,而不是obj自身
  }
}
obj.sayHi(); //Hello, undefined

注意事项

虽然箭头函数有很多简洁明了的语法特性,但仍然需要注意一些细节。

1. 适合处理单行代码的场景

箭头函数的语法特点是可以省略掉很多约束性的代码,它适合处理单行代码的场景。如果需要处理复杂的业务逻辑,或者需要多行代码,就不建议使用箭头函数。

// 使用箭头函数处理单行逻辑
const double = n => n * 2; // 只有一行代码,适合使用箭头函数
console.log(double(2)); // 4
// 箭头函数处理复杂逻辑会导致代码可读性差
const sum = (a, b) => {
  let result = 0;
  for (let i = a; i <= b; i++) {
    result += i;
  }
  return result;
} // 多行代码,不建议使用箭头函数
console.log(sum(1, 100)); // 5050

2. 箭头函数的返回值不需要使用 return 关键字

在箭头函数中,如果只有单个返回值,可以省略掉 return 关键字,直接返回。

// 省略return关键字的写法
const hello = () => 'Hello World';
console.log(hello()); // Hello World

3. 函数体需要使用花括号 {} 和 return 关键字的情况

在箭头函数中,如果需要多行代码或者需要返回一个对象,则需要使用花括号和 return 关键字。

// 使用花括号和 return 关键字
const getInfo = () => {
  const name = 'Tom';
  const age = 18;
  return { name, age };
};
console.log(getInfo()); // {name: "Tom", age: 18}

总结

不能使用箭头函数的情况包括不能作为构造函数和无法绑定 this。箭头函数的操作适用于处理单行代码的场景,它的返回值不需要使用 return 关键字的情况,并且函数体需要使用花括号 {} 和 return 关键字的情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中什么时候不能使用箭头函数 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue中 v-for循环的用法详解

    Vue中v-for循环的用法详解 在Vue中,v-for是一种指令,用于循环渲染数据列表。本篇攻略将详细讲解Vue中v-for的用法。 基本用法 v-for指令需要用在具有多个子节点的元素上,它的语法格式为: <div v-for="(item, index) in items" :key="index">…

    Vue 2023年5月27日
    00
  • 详解vue 组件的实现原理

    详解Vue组件的实现原理 Vue是一个流行的前端框架,它采用组件化开发方式来实现可复用的UI部件。理解Vue组件实现原理对于深入理解Vue有着非常重要的作用。 Vue组件定义 在Vue中,一个组件是一个具有预定义选项的Vue实例。我们可以使用Vue.component方法来创建一个组件。 Vue.component(‘my-component’, { // …

    Vue 2023年5月28日
    00
  • Vue修饰符的使用详解

    Vue修饰符的使用详解 修饰符是什么? 在 Vue.js 中,修饰符指的是在指令(Directive)后面以半角句号 . 指明的特殊后缀,用于改变指令的行为。Vue 提供多个指令修饰符,比如 .stop、.prevent、.capture、.self、.once 等。 常用的修饰符 以下是 Vue 中比较常用的指令修饰符: .stop: 阻止事件冒泡 .pr…

    Vue 2023年5月27日
    00
  • 详解Vue中watch的详细用法

    下面我就详细讲解一下“详解Vue中watch的详细用法”。 什么是watch 在Vue.js中,watch是一个非常有用的特性。他允许你在监测到数据的变化时做出相应的响应。watch可以监测一个特定的属性,如果这个属性的值发生变化,就会调用一段特定的函数。 watch的基本用法 下面,我们先来看一下watch的基本用法。在Vue实例中可以通过$watch方法…

    Vue 2023年5月28日
    00
  • vue3+ts中ref与reactive指定类型实现示例

    下面我将为你详细讲解“vue3+ts中ref与reactive指定类型实现示例”的完整攻略。 一、Ref 1.1 简介 在 Vue 3 中,ref 是一个函数,它可以创建一个响应式数据,ref 函数返回一个对象,对象中包含着响应式数据的值。 1.2 使用 使用 ref 创建响应式数据的格式如下: import { ref } from ‘vue’; cons…

    Vue 2023年5月27日
    00
  • JS动态增删表格行的方法

    下面是详细讲解“JS动态增删表格行的方法”的完整攻略。 动态增加表格行 步骤一:创建表格 我们首先需要在页面上创建一个表格,可以采用以下标准的HTML代码来创建一个包含表格头部的表格: <table> <thead> <tr> <th>姓名</th> <th>年龄</th> …

    Vue 2023年5月28日
    00
  • Vue 组件组织结构及组件注册详情

    Vue 组件是 Vue.js 中非常重要的一部分,它能够帮助我们将一个大型的项目模块化分解,使得代码更易于维护和扩展。本篇攻略将详细讲解Vue 组件的组织结构和组件注册的方法,希望能够帮助你更好地理解 Vue 组件。 组件组织结构 Vue 组件的组织结构一般如下图所示: ├── App.vue ├── types.d.ts ├── components │ …

    Vue 2023年5月28日
    00
  • SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    下面我将给你详细讲解实现“SpringBoot和Vue.js实现的前后端分离的用户权限管理系统”的完整攻略。 概述 要实现前后端分离的用户权限管理系统,首先需要涉及到的技术栈包括SpringBoot、Vue.js、Spring Security、JWT(token)等,其中Spring Security是前后端分离中实现鉴权的关键技术,JWT是用来生成权限认…

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