当前位置:网站首页>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
边栏推荐
- DirectX修复工具V4.1公测![通俗易懂]
- It's settled! 2022 Hainan secondary cost engineer examination time is determined! The registration channel has been opened!
- Apk signature principle
- What data capabilities do data product managers need to master?
- What value can NPDP bring to product managers? Do you know everything?
- Configuration of ZABBIX API and PHP
- 项目中字符串判空总结
- [zero basic IOT pwn] reproduce Netgear wnap320 rce
- 微服务开发步骤(nacos)
- Problem note - Oracle 11g uninstall
猜你喜欢

idea中新建的XML文件变成普通文件的解决方法.

Vnctf2022 open web gocalc0

Word2vec yyds dry goods inventory

Take you to API development by hand
![[leetcode] 16. The sum of the nearest three numbers](/img/60/6a68333d6e543c601e6ed586b830d0.png)
[leetcode] 16. The sum of the nearest three numbers

首届技术播客月开播在即

The data in the database table recursively forms a closed-loop data. How can we get these data

C#学习笔记(5)类和继承

Semiconductor foundation of binary realization principle

【15. 区间合并】
随机推荐
cmake 基本使用过程
Blog recommendation | in depth study of message segmentation in pulsar
Generate random numbers (4-bit, 6-bit)
[零基础学IoT Pwn] 复现Netgear WNAP320 RCE
手把手带你入门 API 开发
写在Doris毕业后的第一天
QT capture interface is displayed as picture or label
[leetcode] 16. The sum of the nearest three numbers
Word2vec yyds dry goods inventory
职场太老实,总被欺负怎么办?
深度分析数据在内存中的存储形式
[leetcode 324] swing sorting II thinking + sorting
tensorflow2-savedmodel convert to pb(frozen_graph)
定了!2022海南二级造价工程师考试时间确定!报名通道已开启!
Solid basic structure and array, private / public function, return value and modifier of function, event
Redis installation and setting up SSDB master-slave environment under Ubuntu 14.04
三十之前一定要明白的职场潜规则
Redis安装及Ubuntu 14.04下搭建ssdb主从环境
【LeetCode】16、最接近的三数之和
【14. 区间和(离散化)】