广告
返回顶部
首页 > 资讯 > 精选 >js中不能使用箭头函数的情况是什么
  • 759
分享到

js中不能使用箭头函数的情况是什么

2023-07-02 14:07:08 759人浏览 泡泡鱼
摘要

这篇文章主要介绍“js中不能使用箭头函数的情况是什么”,在日常操作中,相信很多人在js中不能使用箭头函数的情况是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js中不能使用箭头函数的情况是什么”的疑惑有所

这篇文章主要介绍“js中不能使用箭头函数的情况是什么”,在日常操作中,相信很多人在js中不能使用箭头函数的情况是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js中不能使用箭头函数的情况是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    箭头函数

    箭头函数是和我们工作密切相关的东西;可以说箭头函数的诞生,给我们的工作带来了极大的便利。但是箭头函数有什么缺点?什么时候不能使用箭头函数? 这你了解吗?
    我们觉得箭头函数很高级,可以规避 this 的问题,所有的场景下都是用箭头函数。在不能使用的场景下使用了,出现了问题,你还不知道是什么问题,那这不是瞎添乱吗!是不是!

    这里给大家先提出一个问题:

    const obj = {    name: '张三',    getName() {        return this.name    },    getName1: () => {        return this.name    }}obj.__proto__.getName2 = function() {    return this.name}obj.__proto__.getName3 = () => {    return this.name}console.log('普通函数',obj.getName())console.log('普通函数',obj.getName2())console.log('箭头函数',obj.getName1())console.log('箭头函数',obj.getName3())

    大家觉得会输出什么呢?

    先悄悄思考一下!

    3,2,1 公布答案!

    js中不能使用箭头函数的情况是什么

    箭头函数有什么缺点?

    • 没有 arguments,如果要用,可以用 rest 参数代替。 这里我们定义一个箭头函数和一个普通函数还有一个使用 rest 参数的箭头函数:

      const fn1 = () => {    console.log('arguments', arguments)}fn1(100, 200)function fn2(){    console.log('arguments', arguments)}fn2(100, 200)const fn3 = (...values) => {    console.log('values', values)}fn3(100, 200)

      js中不能使用箭头函数的情况是什么

    • 无法通过 apply、call、bind 改变this指向 这里我们在定义一个箭头函数和一个普通函数

      const fn3 = () => {    console.log('this', this)}fn3()function fn4(){    console.log('this', this)}fn4()

      箭头函数的this就是他父容器的this,不是在执行的时候确定的,而是在定义的时候确定的。

      js中不能使用箭头函数的情况是什么

    • 如上图,我们可以发现,箭头函数的两次执行的 this 都是指向了 Windows使用call并没有发生改变,而普通函数第一次是指向了Windows第二次则是变成了我们传入的

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

    1. 对象方法中,不适用箭头函数

    const obj = {    name: '张三',    getName() {        return this.name    },    getName1: () => {        return this.name    }}

    我们在对象中定义了普通函数:getName箭头函数 getName1,接下来我们来调用一下:

    console.log('普通函数',obj.getName())console.log('箭头函数',obj.getName1())

    这里给大家默想3s输出什么?

    公布答案:

    js中不能使用箭头函数的情况是什么

    我们发现箭头函数好像并没有获取到值诶!

    为什么对象方法中,箭头函数的this指向不是这个对象?

    • this 永远指向函数的调用者

    • 在箭头函数中,this 指向的是定义时所在的对象,而不是使用时所在的对象。换句话说,箭头函数没有自己的 this,而是继承父作用域中的 this。

    obj.getName()this指向函数的调用者,也就是obj实例,因此this.name = "张三"

    getName1()通过箭头函数定义,而箭头函数是没有自己的this,会继承父作用域的this

    因此obj.getName1()执行时,此时的作用域指向window,而window没有定义age属性,所有报空。

    从例子可以得出:对象中定义的函数使用箭头函数是不合适的

    2. 原型方法中,不适用箭头函数

    const obj = {    name: '张三',}obj.__proto__.getName = function() {    return this.name}obj.__proto__.getName1 = () => {    return this.name}

    我们又又又在对象中定义了普通函数:getName箭头函数 getName1,接下来我们来调用一下:

    console.log(obj.getName())console.log(obj.getName1())

    这里再再再给大家默想3s输出什么?

    bang bang bang 公布答案:

    js中不能使用箭头函数的情况是什么

    为什么?

    出现问题的原因是this指向window对象,这和使用箭头函数在对象中定义方法十分类似。

    3. 构造函数也不行!

    我们又又又定义了普通的构造函数:Foo箭头函数 Foo1,接下来我们来调用一下:

    function Foo (name, sex) {    this.name = name    this.sex = sex}const Foo1 = (name, sex) => {    this.name = name    this.sex = sex}console.log('普通的构造函数:', new Foo('张三', '男'))console.log('箭头函数:', new Foo1('张三', '男'))

    不仅不行,还报错了呢!

    js中不能使用箭头函数的情况是什么

    为什么?

    构造函数是通过 new 关键字来生成对象实例,生成对象实例的过程也是通过构造函数给实例绑定 this 的过程,而箭头函数没有自己的 this。因此不能使用箭头作为构造函数,也就不能通过 new 操作符来调用箭头函数。

    4. 动态上下文中的回调函数

    比如,我们需要给一个按钮添加点击事件:

    const btn1 = document.getElementById('btn1')btn1.addEventListener('click', () => {    this.innerhtml = 'clicked'})

    如果我们在回调中不需要使用到 this,那就啥问题也没有,但是!使用到了 this,那么问题就大大的了!

    为什么呢?

    箭头函数的 this 指向的是他的父作用域(这里就指向了 window),而不是指向这个button。这时候我们需要使用普通函数才可以。

    5. Vue 生命周期和 method 中也不能使用箭头函数

    js中不能使用箭头函数的情况是什么

    为什么不行呢?

    Vue 本质上是一个对象,我们说过对象方法中,不适用箭头函数。他的本质上的和对象方法中,不适用箭头函数是一样的。

    那么我有一个问题: Vue不行,作为大热框架之一的 React 行吗?

    回答是: react 行

    因为 Vue组件本质上是一个 JS 对象;React 组件(非Hooks)他本质上是一个 es6 的 class

    不信的话我们测试一下就知道了

    class Man {    constructor(name, city) {        this.name = name        this.city = city    }    getName = () => {        return this.name    }}const f = new Man('李四','上海')console.log(f.getName())

    js中不能使用箭头函数的情况是什么

    划重点

    • 要熟练使用箭头函数,也要对函数 this(重点) 敏感

    • Vue组件本质上是一个 JS 对象;React 组件(非Hooks)他本质上是一个 ES6 的 class,两者不同

    到此,关于“js中不能使用箭头函数的情况是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: js中不能使用箭头函数的情况是什么

    本文链接: https://www.lsjlt.com/news/342246.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • js中不能使用箭头函数的情况是什么
      这篇文章主要介绍“js中不能使用箭头函数的情况是什么”,在日常操作中,相信很多人在js中不能使用箭头函数的情况是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js中不能使用箭头函数的情况是什么”的疑惑有所...
      99+
      2023-07-02
    • JS中不应该使用箭头函数的四种情况详解
      目录箭头函数的一些缺点1、不支持参数对象2、无法通过apply、call、bind来改变this指针什么时候不能使用箭头功能1、请不要在构造函数中使用箭头函数2、请不要在点击事件中操...
      99+
      2022-11-13
    • js中什么时候不能使用箭头函数
      目录箭头函数箭头函数有什么缺点?什么时候不能使用箭头函数?1. 对象方法中,不适用箭头函数为什么对象方法中,箭头函数的this指向不是这个对象?2. 原型方法中,不适用箭头函数3. ...
      99+
      2022-11-13
    • 详解JavaScript什么情况下不建议使用箭头函数
      目录this指向原理问题的由来内存的数据结构函数环境变量箭头函数的缺点不适用的场景总结箭头函数作为ES6新增的语法,在使用时不仅能使得代码更加简洁,而且在某些场景避免this指向问题...
      99+
      2022-11-13
    • JS箭头函数的语法是什么及怎么使用
      本篇内容介绍了“JS箭头函数的语法是什么及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JavaScript的箭头函数随着ECMAS...
      99+
      2023-07-04
    • es6箭头函数什么时候不能用
      这篇文章主要讲解了“es6箭头函数什么时候不能用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6箭头函数什么时候不能用”吧! ...
      99+
      2022-10-19
    • JavaScript中的箭头函数是什么
      这篇文章主要讲解了“JavaScript中的箭头函数是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中的箭头函数是什么”吧!一、箭头...
      99+
      2022-10-19
    • PHP switch语句中不使用break的情况是什么
      这篇文章主要讲解了“PHP switch语句中不使用break的情况是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP switch语句中不使用break的情况是什么”吧!为什么不使...
      99+
      2023-07-05
    • js中eval()函数的作用是什么
      eval()函数在JavaScript中的作用是将传入的字符串作为代码进行解析和执行。它可以执行任意的JavaScript代码,并返...
      99+
      2023-08-09
      js eval()
    • JS中函数表达式和函数声明的不同点是什么
      本篇内容介绍了“JS中函数表达式和函数声明的不同点是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1....
      99+
      2022-10-19
    • Linux中监控磁盘分区和使用情况的工具是什么
      Linux中监控磁盘分区和使用情况的工具是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们将讨论Linux中可用于监视磁盘使用情况的命令行实用程序,提供有关总大小容量、已...
      99+
      2023-06-28
    • python str()函数的功能是什么及怎么使用
      Python的`str()`函数用于将其他类型的变量转换为字符串类型。使用方法如下:```str(value)```其中,`valu...
      99+
      2023-09-21
      python
    • useEffect中不能使用async的原理是什么
      本篇内容介绍了“useEffect中不能使用async的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当页面中使用 useEffe...
      99+
      2023-07-02
    • 使用MySQL中BIN()函数的方法是什么
      小编给大家分享一下使用MySQL中BIN()函数的方法是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! M...
      99+
      2022-10-18
    • 不能在PHP中使用泛型的原因是什么
      小编给大家分享一下不能在PHP中使用泛型的原因是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么我们不能在 PHP 中使用泛型我们将深入探讨泛型和 PHP...
      99+
      2023-06-29
    • C++中string库函数的作用是什么和怎么使用
      本文小编为大家详细介绍“C++中string库函数的作用是什么和怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中string库函数的作用是什么和怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
      99+
      2023-06-30
    • PHP中函数声明与使用的方法是什么
      今天小编给大家分享一下PHP中函数声明与使用的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。声明函数声明函数是指定...
      99+
      2023-07-05
    • Python IDE中的Path函数是什么,如何使用它?
      Python是一种非常强大的编程语言,而Python IDE中的Path函数可以让你更加方便地管理文件路径。在本文中,我们将详细介绍Path函数以及如何使用它。 Path函数是Python中的一个内置函数,它可以帮助你创建、操作和管理文件路...
      99+
      2023-07-26
      ide path 函数
    • Go 函数 API 在 Bash 中的使用方法是什么?
      在 Bash 脚本中使用 Go 函数 API 可以让你的脚本更加高效和灵活。Go 函数 API 是 Go 语言中提供的一组函数库,可以帮助你在 Bash 脚本中实现更加复杂的功能。本文将介绍如何在 Bash 中使用 Go 函数 API,并...
      99+
      2023-08-07
      函数 api bash
    • Java函数数据类型在Apache中的使用限制是什么?
      Java是一种广泛应用于企业级应用的编程语言,它提供了丰富的函数数据类型,并且在各种应用程序中都得到了广泛的应用。Apache是一个著名的开源软件基金会,提供了许多优秀的Java开源项目,如Tomcat、Struts、Hadoop等。在使用...
      99+
      2023-08-16
      函数 数据类型 apache
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作