js中箭头函数和普通函数区别
一.箭头函数和普通函数
箭头函数相当于匿名函数,并且简化了函数定义。
箭头函数有两种格式,一种只包含一个表达式,连{ … }和return都省略掉了。
还有一种可以包含多条语句,这时候就不能省略{ … }和return。
let fun = () => {console.log('111');
}
function fun() { //普通函数console.log('123');
}
二、箭头函数和普通函数的区别
1. 箭头函数不能作为构造函数,而普通函数可以:
箭头函数是匿名函数,不能作为构造函数,不能使用new
let a = function(){console.log('a');
}
let b = () => {console.log('b');
}
console.log(a.prototype) // {constructor: ƒ}
console.log(b.prototype) // undefinedlet a1 = new a();
let b1 = new b(); //b is not a constructor
2.箭头函数没有原型,而普通函数有
3.箭头函数不绑定arguments,取而代之用rest参数…解决;普通函数argument绑定了参数列表对象
function A(a){console.log(arguments);
}
A(1,2,3,4,5,8); // [1, 2, 3, 4, 5, 8, callee: ƒ, Symbol(Symbol.iterator): ƒ]let B = (b)=>{console.log(arguments);
}
B(2,92,32,32); // Uncaught ReferenceError: arguments is not definedlet C = (...c) => {console.log(c);
}
C(3,82,32,11323); // [3, 82, 32, 11323]
4.this指向问题 [重点,也是难点]
- 箭头函数不改变this指向,this为上层函数作用域的this对象,如果没有上层函数作用域,则指向顶部this(在浏览器中顶部this则是window)。普通函数的this指向该函数的调用者。
- call, apply, bind会改变普通函数的this,但不会改变箭头函数的this
var obj = {a: 10,b: () => {console.log(this.a); // undefinedconsole.log(this); // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}},c: function() {console.log(this.a); // 10console.log(this); // {a: 10, b: ƒ, c: ƒ}}
}
obj.b();
obj.c();
var obj = {a: 10,b: function(){console.log(this.a); },c: function() {return ()=>{console.log(this.a); //此处a为10}}
}
obj.b(); //10
obj.c()();//10
箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
let obj2 = {a: 10,b: function(n) {let f = (n) => n + this.a;return f(n);},c: function(n) {let f = (n) => n + this.a;let m = {a: 20};return f.call(m,n);}
};
console.log(obj2.b(1)); // 11
console.log(obj2.c(1)); // 11
5.箭头函数内不能用yield且不能用作Generator函数,而普通函数可以
三.箭头函数的使用
箭头函数有两种格式, 一种只包含一个表达式,没有{…} 和 return
一种包含多条语句, 这个时候{} return 就不能省略
注意:
1.函数体内只包含一个表达式 { … }和return可以省略掉。函数体内包含多条表达式 { … }和return不可以省略掉。
2.如果要返回一个对象,就要注意,如果是单表达式,这么写的话会报错:x => { foo: x }
因为和函数体的{ … }有语法冲突,所以要改为:x => ({ foo: x })
js中箭头函数和普通函数区别相关推荐
- JS中的变量提升和函数提升
console.log(a); var a = 1 如上面代码中可以看出,由于JS是从上到下一行行的执行,因此很多人看到这一串代码的时候,会认为由于log之前没有定义a,因此会输出underfind, ...
- html offsetwidth 字符串宽度,基于js中style.width与offsetWidth的区别(详解)
作为一个初学者,经常会遇到在获取某一元素的宽度(高度.top值...)时,到底是用 style.width还是offsetWidth的疑惑. 1. 当样式写在行内的时候,如 时,用 style.wid ...
- JS中箭头函数和普通函数的五种区别
区别一:this关键字的指向 在普通函数中this指向调用这个函数的对象. 在构造函数中,this指向对象的实例. 在箭头函数中,没有this关键字,但是可以捕获上下文中的this用在箭头函数内部,并 ...
- js 中meta 移除head_JS函数和winform函数之间的相互调用
1.写一个简单的html页面,用于输入日志,代码如下: <html><head> <meta charset="UTF-8"> <scri ...
- js中变量名提升和函数名提升
首先,js中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域. 并且,函数的实质也是一个变量,所以可以改变它的值,即赋值.所以变量名提升和函数名提升非常相像. 1.变量名的提升发生 ...
- js中的变量提升和函数提升——精炼版
javaScript中用var定义变量时存在变量提升(ES6及之后的let/const定义变量时为块级作用域无变量提升,ES6之前js没有块级作用域),比如: console.log(a); // 不 ...
- JS中的setTimeout和setInterval函数
目录 前言 setTimeout setTimeout()函数应用之点名器 setInterval setInterval应用之重写点名器 前言 在生活中,常有定时做某事,或者循环做某事的需求,如设置 ...
- js中以构造函数方式调用函数
构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明.函数表达式或者函数构造器(见以前的随笔)等方式来构造函数对象. 要以构造函数的方式调用函数,只需 ...
- js中关于length与size的区别
length与size的区别 用了很长时间的length的一直没考虑过其与size的区别,今天同事问起,特意查找资料,将两者的相同点与共同点列出来. 相同点:在jQuery中用于返回元素的个数,siz ...
最新文章
- 深度解读:人体防御病毒的免疫力究竟是什么?
- SQL学习总结-思维导图
- 算法导论——所有点对最短路径:稀疏图Johnson算法
- can bus 中spn是什么_CP AUTOSAR功能栈简介NM网络管理(Can)
- SQL Server 2005 Service Broker 初探 [摘抄]
- 大数据分析工具有哪些特性
- Oracle在线撤销表空间,Oracle创建、管理撤销表空间
- 计算机网络英语求职信范文大全,英文求职信
- 网络系统管理赛项之Debian七. 2021年全国职业院校技能大赛将挑选各省1人或1组队伍参赛
- 特征提取丨共空间模式 Common Spatial Pattern (CSP)
- 关于ABA问题(隔壁老王问题)
- [USACO06DEC]最少的硬币The Fewest Coins
- 微信拼车小程序无服务器,滴滴顺风车下架 拼车微信小程序笑了
- 人工蜂群算法(Artificial Bee Colony, ABC)MATALAB代码详细解析
- 脑洞文之去火星搞IT!
- Win7不激活会怎么样 Win7可以不用激活吗
- iftop命令命令详解
- zabbix 监控snmp 网络设备
- r5处理器_Intel难受了,R54500U,6核心处理器笔记本价格才3499元
- 创建Python Pyramid 单文件 Web 应用程序
热门文章
- SQLserver关键字select into 用法
- 通知任务通知错群检讨
- 笔记本开机黑屏提示:ERROR 0199:System Security-Security password retry count exceeded
- 十六进制的浮点数转化为十进制
- 30岁前如何达到年薪10万
- VMware 虚拟机实现硬盘扩容自由 无需格式化
- java numbereditor_java.lang.NumberFormatException: For input string: ${jdbc.maxActive}
- LeNet 网络详解
- window常用命令
- python暴力破解7z_7Z压缩包怎样解密?