JavaScript普通函数与箭头函数有怎样的区别?
比较点 | 普通函数 | 箭头函数 |
---|---|---|
简写 | 箭头函数如果没有参数,同时函数体的返回值只有一句,则{}和return都可以省略。 | |
this指向 | this总是指向调用它的对象,如果作为构造函数,它指向创建的对象实例 | 箭头函数的this指向的是父级作用域的this,是通过查找作用域链来确定 this 的值,也就是说看的是上下文的this,指向的是定义它的对象,而不是使用时所在的对象。 |
this改变 | call()、apply()、bind()等方法能改函数中this的指向 | call()、apply()、bind()等方法不能改变箭头函数中this的指向 |
构造函数 | 可以作为构造函数,用来创建对象实例 | 箭头函数不能作为构造函数使用 |
arguments对象 | 每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。 | 箭头函数没有自己的arguments,取而代之用rest(剩余)参数…arg来解决 |
prototype原型 | 具有prototype | 没有prototype原型 |
重要特性
1、箭头函数没有 arguments
// 1、普通函数中的arguments正确使用:
function foo(n) {
// 隐式绑定 foo函数的参数 与 arguments对象.
// arguments[0] 表示传给foo函数的第一个参数,也就是n
var f = () => arguments[0] + n;
return f();
}
foo(1); // 2
foo(3); // 6
foo(3, 2);//6
// 2、箭头函数中无法使用arguments
// ReferenceError: arguments is not defined
var func = (a, b) => {
return arguments[0];
}
2、箭头函数没有prototype属性
var Foo = () => {};
console.log(Foo.prototype); // undefined
3、箭头函数不能使用new
箭头函数没有this,不能用作构造函数,也就无法使用 new
var Foo = () => {};
var foo = new Foo(); // TypeError: Foo is not a constructor
4、箭头函数没有this
普通函数、对象方法中的this,都是在运行时定义。
普通函数的this 等于 undefined,无法调用;
对象方法的this,指向对象本身。
箭头函数,不会定义自己的this,它只会继承自己上一层作用域的this。
评论区
请写下您的评论...
猜你喜欢
blog
sql中常用的数学函数
数据库基础
2829
sql中常用的数学函数
ofc
c / c++中的函数指针
weblog
2492
值类型//(*MethodPointer)声明一个函数指针//(inta,intb)只能指向有两个int类型的函数typedefint(*MethodPointer)(inta,intb);intadd
blog
MySQL中的any_value()函数
数据库
4118
有如下数据:mysqlselect*fromarea;+----+----------------+----------------+-----------+-----------+|id
blog
mysql yearweek函数
数据库
1027
语法:YEARWEEK(date)或YEARWEEK(date,firstdayofweek)参数值date:需要。从中提取年和周数的日期或日期时间值firstdayofweek:可选,指定星期几
weblog
6940
://photo.jiajiajia.club/item/a-star.htmlDijkstra算法与最佳优先搜索在了解a*算法之前相信您已经对这两个算法有所了解Dijkstra算法是典型最短路径算法,用于计算一个节点到其他节点
ofc
mysql 字符串函数总结
weblog
1979
SelectORD(‘a’)-:973.CONV(N,from_base,to_base)对数字n进制转换,并转换为字串返回,N是要转换的数据,from_base是原进制,to_base是目标进制。selectCO
blog
mysql替换字符串函数replace
数据库基础
2243
'%from_str%'说明:table_name——表的名字field_name——字段名from_str——需要替换的字符串to_str——替换成的字符串
blog
for in 和 for of 的区别
javascript,前端
1142
jsjavascriptforin和forof的区别,forof遍历的原理
一、区别
forin是ES5的语法,forof是ES6的语法forin是无序遍历数组或对象的,也就是随机遍历,不按照顺序来
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。