首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用箭头函数的几个注意事项

刚才写一个需要递归操作的函数,在使用arguments.callee的时候,报错undefined,因为arguments.callee在严格模式下会失效,以为是使用了=>箭头函数后,函数内部环境会以严格模式执行...,查阅资料后才知道不可以在箭头函数使用arguments对象,该对象在函数体内不存在。...以下摘自阮一峰老师在ECMAScript 6 入门第七章函数扩展第5小节箭头函数-------使用注意点 (1)函数体内的this对象,就是定义时所在的对象,不是使用时所在的对象。...(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。 (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。...(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数

80160
您找到你想要的搜索结果了吗?
是的
没有找到

几种应该避免使用箭头函数的情况

几种应该避免使用箭头函数的情况 ⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅 避免在定义对象方法时使用 箭头函数虽然因语法简练受人追捧。...,这个 bug 有点 因此不要在对象方法中使用箭头函数 避免在 prototype 上使用 因为没有 this 导致 this 指向错误,所以在定义 prototype 方法上一定记得不要使用箭头函数...避免在需要 arguments 上使用 因为箭头函数没有 arguments 因此如果外层是另外一个函数,那么 arguments 是这个外层函数的 当然可以使用 rest 操作符获取对应的参数 避免在动态上下文中的回调函数使用...如果你需要你的上下文是可变的,动态的,那么不要使用箭头函数 比如在一个页面中,我们需要为每一个 p 元素增加一个事件处理函数,那么: document.querySelectorAll('p').forEach...其他情况下尤其是 map reduce forEach 等并没有什么复杂的逻辑的时候使用箭头函数能够增加阅读体验,想必是极好的 that's all 在看么 点击按钮推荐给朋友们~

62320

【译】使用箭头函数精简你的 Vue 模块

使用箭头函数的时候,this 是一个常量,这意味着现在的 this 不再动态指向当前的执行上下文了,而是继承了外围作用域。...---- 滥用箭头函数 使用箭头函数的确很酷,但是不是每个地方用它都这么好呢?有些人可能不喜欢每次都声明一个 function() {} 所以把它们都用箭头函数的 () => {} 来简写。...现在 saveItem() 方法里面的 this 指向的是 window 不是我们希望的 Vue 实例对象(因为是继承外围作用域的this),当我们想要在给函数传递 this.item 整个参数的时候...),箭头函数中我们可以使用一种更加简洁的代码结构来定义函数体,看下面的两段代码: var sum = (a,b) => {return a+b;} // 传统块级结构,必须要有 return var...方法定义规范来定义所有顶层方法 使用箭头函数定义所有在顶层方法里面的回调函数 使用“简单结构”来定义 data 的函数体 希望这些规范能够让你的 Vue 模块代码和组件更加吸引人并且更加可读

54920

【译】使用箭头函数精简你的 Vue 模块

使用箭头函数的时候,this 是一个常量,这意味着现在的 this 不再动态指向当前的执行上下文了,而是继承了外围作用域。...滥用箭头函数 使用箭头函数的确很酷,但是不是每个地方用它都这么好呢?有些人可能不喜欢每次都声明一个 function() {} 所以把它们都用箭头函数的 () => {} 来简写。...现在 saveItem() 方法里面的 this 指向的是 window 不是我们希望的 Vue 实例对象(因为是继承外围作用域的this),当我们想要在给函数传递 this.item 整个参数的时候...),箭头函数中我们可以使用一种更加简洁的代码结构来定义函数体,看下面的两段代码: var sum = (a,b) => {return a+b;} // 传统块级结构,必须要有 return var...Vue ES6 规范 踩过那么多坑之后,我总结出了以下几条 Vue 模块定义规范: 使用 ES6 方法定义规范来定义所有顶层方法 使用箭头函数定义所有在顶层方法里面的回调函数 使用“简单结构”来定义

1.2K80

前端测试题: 关于箭头函数的描述,错误的是?

考核内容: 箭头函数使用注意事项 题发散度: ★★ 试题难度: ★ 解题思路: ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 为什么叫Arrow Function?...因为它的定义用的就是一个箭头: x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 关于函数中的 this 箭头函数看上去是匿名函数的一种简写,...但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。...箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj: 函数体内的 this 对象,绑定定义时所在的对象,不是使用时所在的对象 参考代码: 可以看到,THIS并不是函数本身...,而是指向父级 WINDOW,所以this不是自身函数,而是直接父级;所以错误的是D 答案: D、函数体内的 this 对象,绑定使用时所在的对象

4.5K10

箭头函数与普通函数(function)的区别是什么?构造函数(function)可以使用 new 生成实例,那么箭头函数可以吗?为什么?

基本不同 1.写法不同,箭头函数使用箭头定义,普通函数中没有 .箭头函数都是匿名函数,普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。...在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。箭头函数中没有this,声明时捕获其所在上下文的this供自己使用。...所以箭头函数结合call(),apply()方法调用一个函数时,只传入一个参数对this没有影响。...,不能使用new 关键字,因为new关键字是调用函数对象的constructor属性,箭头函数中没有该属性,所以不能new function fn1(){ console.log...arguments,取而代之用rest参数…解决 6.箭头函数不可做Generator函数

1.8K10

OpenCV绘制箭头线段---函数arrowedLine()使用(C++ Python)

OpenCV不仅提供了绘制线段、矩形、圆等方法,还提供了一个绘制箭头线段的函数arrowedLine(),OpenCV官方文档介绍: https://docs.opencv.org/4.4.0...以OpenCV4.4.0为例,使用函数需要包含头文件imgproc.hpp --> #include 参数也比较容易理解: img: 需要绘制箭头的图像 pt1..., pt2:绘制箭头线段的起点和终点坐标 color: 绘制箭头线段的颜色 thickness: 箭头线段的线宽(线的粗细) line_type: 绘制线的类型参考定义LineTypes shitf:...0.3) cv2.imshow('LineArrows', img) cv2.waitKey(0) cv2.destroyAllWindows() 这里有一个优化版的C++ OpenCV绘制带箭头线段的函数...,OpenCV绘制的箭头角度看起来都是45°有些呆板,调用实例: //自定义函数绘制 drawArrow(img, Point(10, 30), Point(200, 30), 30, 30, Scalar

5.6K40

不要在watch或method里面使用箭头函数定义watcher或方法

注意,不应该使用箭头函数来定义 watcher 函数 (例如 searchQuery: newValue => this.updateAutocomplete(newValue))。...理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.updateAutocomplete 将是 undefined。...先说原因 1.在标准函数中this引用的是把函数当成方法调用的上下文 2.在箭头函数中this引用的是定义箭头函数的上下文 换句话说就是标准函数中this的确定是跟调用那个函数的上下文有关,箭头函数的...this确定是跟定义箭头函数的上下文有关 所以会出现这样的问题 watch:{ score: (newVal)=>{ console.log("箭头函数的this") console.log...(this) //undefined } }, watch:{ score: function(newVal){ console.log("标准函数的this") console.log

32930

【Kotlin】函数 ⑦ ( 内联函数 | Lambda 表达式弊端 | “ 内联 “ 机制避免内存开销 - 将使用 Lambda 表达式作为参数的函数定义为内联函数 | 内联函数本质 - 宏替换 )

文章目录 一、内联函数 1、Lambda 表达式弊端 2、" 内联 " 机制避免内存开销 3、内联函数本质 - 编译时宏替换 4、内联函数不能递归 二、普通函数代码示例 三、内联函数代码示例 一、内联函数...---- 1、Lambda 表达式弊端 Lambda 表达式弊端 : Lambda 表达式 的 灵活使用 , 是以 牺牲内存开销为代价的 ; 在 Java 虚拟机中 , Lambda 表达式 是以 实例对象...内存开销 问题 , 将 使用 Lambda 表达式 作为参数的函数 定义为 inline 内联函数 , Java 虚拟机就 不会再为 lambda 表达式 在堆内存中 创建 实例对象 了 , 这样就...避免了 Lambda 表达式 的内存开销 ; 3、内联函数本质 - 编译时宏替换 内联函数使用 : 在使用 Lambda 表达式的时候 , Kotlin 编译器直接将 inline 内联函数函数体...直接拷贝到 使用位置 ; 内联函数 类似于 C 语言中的 预编译指令 宏定义 , 在编译时直接替换拷贝宏定义内容 ; Kotlin 中的 内联函数 也是一种 编译时 进行 宏替换的操作 ; 4、内联函数不能递归

1.2K10

错误不可怕,就看你如何使用ISNA函数

标签:Excel函数 本文深入探讨在Excel中使用ISNA函数处理#N/A错误的各种方法。 当Excel无法找到所需内容时,单元格中会出现“N/A”错误。...要拦截和处理此类错误,可以使用ISNA函数,它可以使公式更加友好,使工作表更加美观。 ISNA函数 Excel ISNA函数用于检查单元格或公式是否存在N/A错误。...使用ISNA函数的基本公式示例: =ISNA(A2) 如果单元格A2包含#N/A错误,则返回TRUE,如果出现任何其他错误、值或空白单元格,则返回FALSE。如下图1所示。...IF/ISNA组合的Excel公式 ISNA函数只能返回两个布尔值,因此可将其与IF函数结合使用,显示自定义消息: IF(ISNA(…),有错误时的文本, 没有错误时的文本) 进一步完善上面的示例,找出组...SUMPRODUCT/ISNA组合统计#N/A错误数 要统计特定单元格区域内的#N/A错误,可将ISNA函数与SUMPRODUCT函数一起使用,方法如下: SUMPRODUCT(--(ISNA(range

8K20

灵活使用JS函数声明与函数表达式要弄清哪两点?

所以不要在条件语句中使用函数声明,可以使用函数表达式。...1//错误示例:不要把函数声明放在条件语句中,有的浏览器会把fn声明为返回1的函数,有的浏览器把fn声明为返回2的函数 2if(true){ 3 function fn(){ 4...看下面这段关于函数声明规则官方摘录: 函数声明只能出现在程度或函数体内。从句法上讲,它们不能出现在块中,比如不能出现在if、while或for语句。因为块只能包含语句,不能包含函数声明这样的源元素。...唯一可能让表达式出现在块中的情形,就是让它作为表达式语句的一部分。但是规范也明确规定表达式语句不能以function开头。而这实际上就是说,函数表达式同样也不能出现在语句或块中。...由于存在上述限制,只要函数出现在块中,实际上就可以看作是一个语法错误不用管什么函数声明或表达式。 所以较佳实践应是,不要把函数写在语句或块中,不管是声明函数还是表达式函数

65830

java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

(如果不是public的那么计数)  也即是只有一个抽象方法默认不算,Object的public也不算 函数式接口的实例可以通过 lambda表达式  方法引用 或者构造方法引用进行表示 类型必须是接口...,不能是其他的比如class 而且需要符合函数式接口的定义要求 否则使用注解时编译器报错 不管他们是否有使用注解FunctionalInterface 进行注解, 编译器将会把任何满足函数式接口定义的接口当做一个函数式接口...参数列表 箭头   ( -> 把参数列表与Lambda主体分隔开) Lambda主体 (表达式或者语句) 一些变形     1. ...可以把  4  中的表达式进行简化,(x, y) -> x + y;    这借助于类型推断 下面会说到  Lambda只能引用值,不是变量(要求事实上的final) 匿名内部类,需要引用它所在方法里的变量时...换句话说,Lambda 表达式引用的是值,不是变量 跟匿名内部类类似,使用的是变量值的拷贝 所以需要是不改变的 如果你试图给该变量多次赋值,然后在 Lambda 表达式中引用它,编译器就会报错

1.7K30

面试官:为什么data属性是一个函数不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象,也可以是一个函数 const app = new Vue({ el:"#app", // 对象格式...警告说明:返回的data应该是一个函数在每一个组件实例中 二、组件data定义函数与对象的区别 上面讲到组件data必须是一个函数,不知道大家有没有思考过这是为什么呢?...... } 定义data会进行数据校验 源码位置:/vue-dev/src/core/instance/init.js 这时候vm实例为undefined,进入if判断,若data类型不是...(根实例是单例),不会产生数据污染情况 组件实例对象data必须为函数,目的是为了防止多个组件实例对象之间共用一个data,产生数据污染。...采用函数的形式,initData时会将其作为工厂函数都会返回全新data对象 面试官VUE系列总进度:10/33 面试官:说说你对vue的理解? 面试官:说说你对SPA(单页应用)的理解?

3.1K10
领券