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

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

不能使用箭头函数的情况

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数据监听方法watch的使用

    Vue数据监听方法watch的使用 Vue中的数据监听方法 watch 可以用于监听数据的变化并做出响应。在该攻略中,我们将详细介绍 watch 的基本概念、用法以及示例代码。 基本概念 在Vue中,使用 watch 可以监听到一个数据的变化,并做出响应。watch 有两个参数:要监听的数据,以及监听数据变化后要执行的回调函数。当监听的数据发生变化时,Vue…

    Vue 2023年5月27日
    00
  • 八种vue实现组建通信的方式

    以下是八种Vue实现组件通信的完整攻略: 1. Props Props是Vue组件间通信中最常用的一种方式。Props允许父组件向子组件传递数据,可以通过在子组件中声明props选项来接收父组件传递的值。示例代码如下: <!–父组件模版–> <template> <Child :msg="message"…

    Vue 2023年5月29日
    00
  • 详解Vue3的响应式原理解析

    详解Vue3的响应式原理解析 什么是响应式原理 Vue3的核心原理之一是响应式原理。简单来说,响应式原理是让运用了Vue3的项目能够在数据发生改变时实时进行视图更新的机制。 响应式原理的实现 Vue3的响应式原理通过Proxy实现。Proxy是ES6引入的一种代理机制,类似于Object.defineProperty(),但是比defineProperty更…

    Vue 2023年5月27日
    00
  • vue-cli3访问public文件夹静态资源报错的解决方式

    当我们使用Vue.js进行项目开发时,通常需要访问public文件夹中存放的一些静态资源,例如图片、音视频等。但是,有时我们在进行开发时可能会遇到访问public文件夹静态资源时报错的情况,如何解决呢?本文将为你详细讲解。 问题分析 在vue-cli3中,开发环境下引用相对路径的静态资源是没有问题的,但是当我们使用build之后的代码时,引用相对路径的静态资…

    Vue 2023年5月28日
    00
  • 学习 Vue.js 遇到的那些坑

    学习Vue.js遇到的坑可以总结为以下几点: 1. 环境搭建 Vue.js是基于Vue-cli脚手架搭建的,我们需要先安装Node.js和npm,然后通过npm安装Vue-cli。在使用Vue-cli创建项目时,需要选择不同的模板,如Webpack、Browserify等。选择合适的模板会影响到后续的开发和打包。 示例: 安装Vue-cli命令: npm i…

    Vue 2023年5月28日
    00
  • vue-tree-chart树形组件的实现(含鼠标右击事件)

    树形组件介绍 vue-tree-chart是基于Vue实现的树形组件,其可以用于呈现大量的数据,并支持鼠标右键事件。该组件支持多级嵌套的树形结构,可以轻松地呈现层级数据,拥有流畅的展开和折叠操作,同时支持自定义节点的样式、连接线等。下面将介绍如何实现该组件。 实现步骤 首先在Vue项目中安装vue-tree-chart组件: npm install vue-…

    Vue 2023年5月28日
    00
  • vue3中各种类型文件进行预览功能实例

    我将为您详细讲解“Vue3中各种类型文件进行预览功能实例”的攻略。 一、问题背景 在Vue3中,如何实现对各种类型文件进行预览功能?比如图片、音频、视频等类型的文件。 二、解决方案 Vue3中可以使用第三方库来实现文件预览功能,其中比较常用的有以下几种: viewerjs:适用于图片、PDF、音频和视频等各种类型的文件预览。 vue-plyr:一个视频和音频…

    Vue 2023年5月28日
    00
  • vue3.2中的vuex使用详解

    下面是关于vue3.2中的vuex使用详解的完整攻略。 1. 什么是Vuex Vuex是Vue.js应用程序的状态管理模式。它通过一个集中的存储管理所有组件的状态,并以相应的规则保证状态以可预测的方式发生变化。 2. 如何使用Vuex 2.1 安装Vuex 在vue项目中使用Vuex,需要先安装Vuex。使用npm安装: npm install vuex -…

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