当前位置:网站首页>JS中箭头函数和普通函数的区别
JS中箭头函数和普通函数的区别
2022-07-01 14:55:00 【小火车况且况且】
JS中箭头函数和普通函数的区别
打印的结果不同
var person = {
say: function () {
},
say2: () => {
}
}
console.dir(person.say)
console.dir(person.say2)

- 箭头函数是没有
prototype和arguments属性的
this的指向不同
- 普通函数的
this是在函数运行时候确定的, 基本满足谁调用指向谁, 特殊情况除外 - 箭头函数的
this是在函数定义就确定了, 因为箭头函数是没有this, 所以内层的this就指向箭头函数上层的作用域, 并且不可以通过call, apply, bind改变this指向
var aaaa = '大火车'
var person = {
aaaa: '小火车',
say: function () {
console.log(this.aaaa)
},
say2: () => {
console.log(this.aaaa)
}
}
person.say() // 小火车
person.say2() // 大火车
普通函数say中的this因为是被person对象调用, 所以this就指向了person对象, 打印的结果就是小火车
箭头函数say2中的this是在函数定义的时候就确定了, 而且对象不构成独立的作用域, 所以this就指向了顶级作用域window, 打印结果就是大火车
箭头函数不能作为构造函数
function Person() {
}
const per = new Person()
使用new 创建构造函数的四个步骤
- 创建一个空对象
- 链接到原型
- 改变
this指向 - 返回新的对象
// 1.创建一个空对象
let obj = {
}
// 2.将对象的对象原型赋予Person的原型对象
obj.__proto__ = Person.prototype
// 3.改变this指向
let result = Person.call(obj, ...arguments)
// 4. 返回新的对象
return result
因为箭头函数是没有prototype原型对象的, 因此如果直接使用new 就会报错
箭头函数没有自己的arguments
const aa = ()=> {
console.log(arguments)
}
aa()

因为这里的箭头函数往上层作用域查找arguments, 但是全局的作用域window是没有arguments属性的, 所以报错
function aa() {
const bb = ()=> {
console.log(arguments)
}
bb()
}
aa() // Arguments [callee: ƒ, Symbol(Symbol.iterator): ƒ]

这里的箭头函数会找到上层作用域aa函数的arguments
边栏推荐
- These three online PS tools should be tried
- [zero basic IOT pwn] reproduce Netgear wnap320 rce
- 官宣:Apache Doris 顺利毕业,成为 ASF 顶级项目!
- Buuctf reinforcement question ezsql
- What is the relationship between network speed, broadband, bandwidth and traffic?
- Develop small programs and official account from zero [phase III]
- 三十之前一定要明白的职场潜规则
- 微信网页订阅消息实现
- The first technology podcast month will be broadcast soon
- Some thoughts on software testing
猜你喜欢

炎炎夏日,这份安全用气指南请街坊们收好!
![[15. Interval consolidation]](/img/6c/afc46a0e0d14127d2c234ed9a9d03b.png)
[15. Interval consolidation]

Markdown编辑器使用基本语法

Guess lantern riddles, not programmers still can't understand?

Written on the first day after Doris graduated

Rearrangement of overloaded operators

cmake 基本使用过程

竣达技术丨室内空气环境监测终端 pm2.5、温湿度TVOC等多参数监测

IDEA全局搜索快捷键(ctrl+shift+F)失效修复

对于编程思想和能力有重大提升的书有哪些?
随机推荐
TypeScript:var
It's settled! 2022 Hainan secondary cost engineer examination time is determined! The registration channel has been opened!
竣达技术丨室内空气环境监测终端 pm2.5、温湿度TVOC等多参数监测
Error-tf.function-decorated function tried to create variables on non-first call
These three online PS tools should be tried
这3款在线PS工具,得试试
Mongodb second talk - - mongodb High available Cluster Implementation
qt捕获界面为图片或label显示
Solid basic basic grammar and definition function
TypeScript: let
Apk signature principle
opencv学习笔记五--文件扫描+OCR文字识别
Don't want to knock the code? Here comes the chance
Zabbix API与PHP的配置
QT capture interface is displayed as picture or label
官宣:Apache Doris 顺利毕业,成为 ASF 顶级项目!
Mongodb second call -- implementation of mongodb high availability cluster
What are the requirements for NPDP product manager international certification registration?
Basic operations of SQL database
Word2vec yyds dry goods inventory