箭头函数的坑

React踩坑日记(1)- 箭头函数后面的大括号带还是不带呢? 一、用箭头函数写了一个遍历组件的方法 今天copy的时候发现了一个问题,代码如下: /** * @Description: * @param {e} 数组 * @param {Panel} const { Panel } = Collapse; antd的折叠面板组件 */ showPanel = e => { e.length > 0 ? ( e.map(item => { return ( ); }) ) : ( ); }; 在页面中的引入如下: console.log('e ', e)}> {this.showP 立即下载

es6里面的箭头函数很好用,不过也有些坑,如果你觉得它完全取代了function关键字,那就是大错特错了。
构造函数
箭头函数无法跟function一样使用new:

var Foo = ()=>{
    console.log(this)
}
var Foo2 = function(){
    console.log(this)
}
console.log(Foo.prototype)//undefined
console.log(Foo.constructor)//[Function: Function]

console.log(Foo2.prototype)//Foo2{}
console.log(Foo2.constructor)//[Function: Function]

var f2 = new Foo2()
console.log(f2.__proto__)//Foo2 {}
var f = new Foo()//报错,因为没有prototype

我们再来回顾下new的执行过程:
1、创建一个空对象
2、将该对象的__proto__指向到构造函数(比如Fn)的原型prototype
3、修改构造函数Fn的上下文到空对象
4、返回空对象(其实就是this)

//new的执行过程
function myNew(Fn){

    let mythis = {} //定义一个空的object
    
    mythis.__proto__ = Fn.prototype

    let args = [].slice.call(arguments,1)
    Fn.apply(mythis,args)
    
    return mythis //其实这个就是this
}
function Person(name){
    this.name = name
}
let o = myNew(Person,'jack')
console.log(o)

箭头函数不满足第二步,也就是没有原型prototype,因此无法使用new关键字。
this
虽然箭头函数可以帮我们绑定this上下文作用域,但如果不清楚内部原理滥用的话,仍然会遇到大坑。

    window.color = 'blue'
    let color = 'green'
    let obj = {
        color: 'yellow',
        getColor: () => {
            console.log(this)//指向了window
            console.log(this.color)
        }
    }

    obj.getColor()//blue

这段代码相当具有迷惑性,getColor的this居然指向了window!为啥呢?
这是因为:箭头函数绑定的上下文是定义时的this,而不是执行时的this。
箭头函数无法使用new,当然也就无法返回this,因此对象内部的箭头函数若有this,那它只能指向对象的外面作用域window。
call和apply
正常的function是可以使用call或apply改变执行作用域的,箭头函数行吗?

    window.color = 'blue'
    let color = 'green'
    let obj = {
        color: 'yellow',
    }
    let getColor =  () => {
        console.log(this)//指向了window
        console.log(this.color)
    }
    getColor.call(obj)//blue

这个就不需解释了吧~~

3D视觉引导技术在机器人焊接中的应用 通过对比传统的2D视觉和3D视觉技术在焊接领域的应用差异,探讨了3D视觉引导技术在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势。本文对3D视觉引导技术在机器人焊接中的应用进行了深入探讨,总结了其在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势,并通过应用案例展示了其在焊接路径规划、焊缝检测和焊接质量控制等方面的重要作用。1. 提高焊接精度:3D视觉引导技术能够精确测量焊接工件的三维形状和位置,为机器人提供精准的焊接路径规划和跟踪,从而提高焊接精度。三、3D视觉引导技术概述。 阅读详情

相关推荐

VASP实战:从非共线磁矩到自旋轨道耦合磁各向异性能的完整计算流程解析

本文详细解析了VASP中从非共线磁矩计算到自旋轨道耦合磁各向异性能的完整流程。通过实战案例和参数配置技巧,帮助研究者掌握非线性磁矩计算的关键步骤,包括SOC参数设置、文件传递逻辑以及磁各向异性能的精确提取方法,为材料磁性研究提供实用指导。

weixin_31102231的博客 411

微信小程序开发中容易出现的错误思路、误区及示例解析

综上所述,微信小程序开发中存在一些容易产生的错误思路和误区,包括页面渲染和事件处理的顺序问题、页面生命周期函数的误用、作用域问题、全局数据共享问题、对小程序API理解不足、小程序和Web开发的差异,以及组件化和代码复用等。但由于小程序的运行机制,每个页面实例都是独立的,无法直接访问其他页面实例的数据。错误思路:开发者对微信小程序提供的API的使用方式和限制理解不足,导致代码无法正常运行或产生不可预期的结果。来复用一些公共的代码逻辑。是一个异步操作,页面的数据更新和渲染是在事件循环的下一个周期中进行的。

笔记、经验、日常分享 911

最近爆火的 Ontology 本体是什么?一文看懂基础概念 + 落地实操

1993 Tom Gruber原版定义:本体是对领域概念化模型的显式形式化规范。1998 Studer完善通用定义:本体是共享、明确、形式化的领域概念模型规范。大白话翻译:本体就是机器能看懂的行业词典+业务规则手册。数据库只管存数据,本体只管定规则,知识图谱是规则+数据结合体。区别于普通开源本体工具,这款国产商用本体平台核心优势:业务沙盘推演、可控业务数据写回、全链路字段级数据血缘审计,适配企业生产级业务落地。

驽马不舍 368

箭头函数和function的区别

箭头函数和function的区别 1、写法不同 2、this指向不同,箭头函数的this指向定义函数的环境,固定不变 3、箭头函数不能当构造函数 4、箭头函数不能变量提升

A444477的博客 369

【已解决】如何在服务器中下载huggingface模型,解决huggingface无法连接

在服务器上使用huggingface模型时,如果直接指定模型名称,用AutoTokenizer.from_pretrained(“model_name”),可能会由于网络原因会报错 Failed to connect to huggingface.co port 443 after 75018 ms: Operation time out因此我们需要下载模型到服务器上,得到模型本地的路径model_dir,再通过AutoTokenizer.from_pretrained(model_dir)方式来使用。

a61022706的博客 4万+

虚幻引擎5 AR开发教程02:构建和测试AR Android App

在本教程中,我们将学习如何在虚幻引擎 5 上构建和测试 AR 安卓应用。

mopanchun的博客 2650

构造函数.原型(prototype)和new出来的实例.__proto__的关系

构造函数添加属性和方法的(两种不一样方式但意思一样的不常见的) // 创建一个构造函数 function person2() { this.name = "小连"; this.addnum = function () { console.log(22); }; } var p2 = new person2(); console.log(p2.name); p2.addnum(); // 创建一个构造函数 function person1() {} // 在该构造函数的原型prototy

qq_37734787的博客 575

基于最小二乘法蒙特卡洛模拟(LSM)可转债定价原理及算法演示

可转换债券是一种极其复杂的信用衍生产品,除了一般债权外,它还包含着多个期权,包括转股权、回售权、赎回权和发行人的转股价格修正权,条款的复杂性决定了可转债定价的复杂性。可转债定价方法较为普遍的是依据B-S期权定价公式和二叉树模型,在对内嵌期权定价的基础上,加上纯债的价值,从而对可转债进行定价。但是可转债附加的期权不仅仅是一个美式期权,而是附加了赎回、回售和下修等特殊条款,以上定价方法仅可看做对可转债价值的近似估计,难以对其中的条款博弈进行定价。

weixin_43971191的博客 1732

实例内两个方法,一个用普通函数,一个用箭头函数,创建实例后,this指向、创建实例时候普通函数和箭头函数不同、new内部的实现流程。

如果是普通函数方法,该方法会绑定在构造函数的原型上 如果是箭头函数方法,该方法会绑定在构造函数上 调用class中的方法,无论是箭头函数方法还是普通函数方法,方法中的this都指向实例对象。

青山不改,绿水长流。 173

新手小白入门编程第2讲 JAVA编程环境搭建 JDK与环境变量、Eclipse

1 JDK 1.1 JDK概述 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。 JDK是整个java开发的核心,它包含了: JAVA开发工具(jdk\bin) 基础开发库(jdk\jre\lib\rt.jar) 基础开发库的源码(jdk\src.zip) 1.2 JDK下载与安装 本次使用的是JDK1.8,详细安装步骤可以参见”JDK培优安装手册”. 注意事项: 同时安装多个JDK时需要使用执行环境变量来确认使用的是哪个jdk 安装时选择默认选项安装到默认

程序媛泡泡的博客 4万+

宝塔面板+pbootCMS建站全流程:从服务器选购到上线优化(附常见问题排查)

本文提供了一份详尽的宝塔面板与pbootCMS建站实战指南。内容涵盖从云服务器选购、宝塔面板部署与安全加固,到pbootCMS安装、权限配置、数据库连接等核心步骤。同时深入讲解了PHP环境优化、Nginx伪静态设置、缓存开启等性能与SEO优化技巧,并附有常见问题排查与后期维护建议,帮助用户高效、稳健地完成专业网站构建。

e4f5g6h的博客 661

箭头函数总结

箭头函数总结

EmilyHoward的博客 744

基于STM32设计的老人防摔倒报警设备(OneNet)_65

本文设计了一种基于STM32单片机的智能老人防摔倒报警设备。该系统结合MPU6050陀螺仪传感器实时监测老人的姿态变化,检测摔倒事件;通过SIM800C通信模块发送短信通知紧急联系人,并将GPS定位信息上传至云端平台,确保家属能够及时了解老人的准确位置。

1万+

=> 箭头函数 · 方便、快捷,也要小心坑

箭头函数是必须要掌握的,今天我们一起来学习一下,它给开发者带来方便的同时,也要留意它的「无能」。先看一个例子:const names = [ 'wsy', ...

lefex的博客 1792

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Vue踩坑之一】箭头函数的this指向

【一】methods箭头函数的this指向 箭头函数没有自己的this, 它的this是继承而来; 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象 <body> <h1 id="app"> <span>{{message}}</span><br /> <button v-on:click="reverseMessage">逆转消息</button> </

FrequencyStar的博客 1482

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

map中使用箭头函数遇到的坑

箭头函数提供了更简洁和更短的语法,其中一个可用功能是可以将函数编写为具有隐式返回值的lambda表达式。这对于功能样式代码很方便,比如使用函数映射数组: const numbers = [1,2,3,4]; numbers.map(n => n * n); 这个箭头函数将按照预期的方式工作,它将值自身相乘并返回到包含的新数组[1, 4, 9, 16] 但是,如果你尝试映射到...

weixin_30879833的博客 652

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

踩坑 ES6箭头函数 this指向问题记录

之前看es6新特性时,有个印象关于 ES6箭头函数 this指向问题的特殊性。然而并没谨记在心o(╥﹏╥)o 今儿帮忙解决问题,调入此坑将近两小时不能自拔???? 最开始的现象只是赋值无法成功,追查到时因为无法进入组件监听所以没有update,之后发现this.data 要赋值的对象是普通的js对象,而非vue对象。 vue对象形式: 普通js对象: 而后追查到时this指向问题。之后追查到在发request请求then的回调结果中this的指向变成了Window对象,而非vue对象。然后又傻傻地追查了好几

BigOrange的博客 513

箭头函数 vs 普通函数:前端开发者必须掌握的差异点(附实战避坑指

捕获,俗称“词法 this”。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1011

箭头函数的坑——arguments无法使用

在使用箭头函数时,arguments 指向的对象并不是当前函数所属的argments,而是上级函数的arguments,所以需要将箭头函数转为function。这一点与箭头函数中的this相像。

gaochengyidlmu的博客 4245

JS原型链总结,箭头函数的坑

1. JS 原型链是什么? 有时候很多对象会有共同的方法和属性,不可能让每一个对象都定义一个属性,那样太消耗内存了 原型链上的所有节点都是对象,不能是字符串、数字、布尔值等原始类型 注意: 只有函数才有 prototype (函数也是一个对象), 实例只有 proto 函数是 Function 的实例, 函数的 prototype 是 Object 的实例 (关键) Object.prototype.proto 指向 null 实例化对象的 constructor 属性指向 构造函数 本身 fun

qq_44818085的博客 610

前端箭头函数深度解读:从语法糖到实战避坑,一文吃透

本文深度解析前端箭头函数的核心特性与使用场景,从语法简化到实战避坑指南。文章首先对比箭头函数与普通函数的三大本质差异(arguments对象、构造函数能力和prototype属性),重点剖析箭头函数this绑定的静态特性——继承外层作用域的this且不可修改。通过10+业务代码案例,详细说明推荐使用箭头函数的场景(数组方法回调、异步回调等)和禁止使用的情况(对象方法、构造函数等)。掌握这些关键知识点,可避免90%的常见错误,提升代码质量和开发效率。

linyuzhizou的博客 1265

箭头函数this指向问题踩的坑

要实现的效果:点击元素获取对应的下标 <div class="box-item"> <div></div> <div></div> </div> <script> var div=document.querySelector(".box-item"); var divs=div.querySelectorAll("div") fo

浅夏博客 212

es6箭头函数踩坑点

基础用法 es6允许使用箭头(=&gt;)定义函数 const arrowFunc = () =&gt; void console.log("Hello Word!"); 使用圆括号代表参数部分,如果代码块部分执行语句较多,需要使用大括号将代码块包裹起来,如果函数只返回一个对象,这需要在括号将对象进行包裹,如果代码块只用一条语句,且不返回任何值,可以使用void命令...

Jaden 499

箭头函数this指向,坑惨了!

箭头函数this指向,坑惨了!昨晚写个按钮点击,this指向全乱了。气得把咖啡杯一摔,屏幕都溅到。报错现场 点击按钮,控制台疯狂报。我盯着代码看了半小时,以为自己脑子锈了。根源就仨字:继承 箭头函数没有自己的,直接抄外层作用域的。但是DOM事件,触发时指向。 普通函数的是动态绑定的,但写在里,它以为自己是的属性。 (别问为啥,问就是浏览器事件绑定的锅)正确姿势 方案1:用硬绑定 方案2:用(推荐) 对比关键 避坑血泪总结 最后补一句:昨晚debug到三点,就因为这个坑。现在看代码

qq_36287830的博客 252

关于 ES6 箭头函数 用法 以及 Vue 中 data / method 里不能用箭头函数的坑点记录

文章目录1>. arrow function1). how to use2). difference2>. vue's method don't use arrow method! 1>. arrow function 1). how to use 无参数 let hello_1 = function () { console.log('hello'); } let hello_2 = () => 'hello' 含参数 let hello_1 = function (

♡ 脚下的每一步都叫远方 ♡ 971

做完100道题,说说遇到的箭头函数的坑

上面说到的这些,都是来源于我自己想到this的第一反应,其实潜藏的还有一些隐藏逻辑;

lazy_tomato的博客 299
上一篇: 块级作用域的坑
下一篇: 本地缓存与协商缓存
姜治宇
博客等级 码龄10年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值