当前位置:网站首页>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
边栏推荐
- 首届技术播客月开播在即
- NPDP产品经理国际认证报名有什么要求?
- openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题
- 241. Design priorities for operational expressions
- 微信公众号订阅消息 wx-open-subscribe 的实现及闭坑指南
- tensorflow2-savedmodel convert to tflite
- 保证生产安全!广州要求危化品企业“不安全不生产、不变通”
- Opencv interpolation mode
- [14. Interval sum (discretization)]
- MongoDB第二话 -- MongoDB高可用集群实现
猜你喜欢

定了!2022海南二级造价工程师考试时间确定!报名通道已开启!

Minimum spanning tree and bipartite graph in graph theory (acwing template)

openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题

Task.Run(), Task.Factory.StartNew() 和 New Task() 的行为不一致分析

Blog recommendation | in depth study of message segmentation in pulsar

Problem note - Oracle 11g uninstall

微服务追踪SQL(支持Isto管控下的gorm查询追踪)

C learning notes (5) class and inheritance

MIT团队使用图神经网络,加速无定形聚合物电解质筛选,促进下一代锂电池技术开发

手把手带你入门 API 开发
随机推荐
Cannot link redis when redis is enabled
[Verilog quick start of Niuke question series] ~ use functions to realize data size conversion
Opencv Learning Notes 6 -- image mosaic
opencv学习笔记六--图像拼接
Redis installation and setting up SSDB master-slave environment under Ubuntu 14.04
NPDP能给产品经理带来什么价值?你都知道了吗?
Problem note - Oracle 11g uninstall
643. Maximum average number of subarrays I
建立自己的网站(14)
【LeetCode】16、最接近的三数之和
Task.Run(), Task.Factory.StartNew() 和 New Task() 的行为不一致分析
[14. Interval sum (discretization)]
241. Design priorities for operational expressions
这3款在线PS工具,得试试
[零基础学IoT Pwn] 复现Netgear WNAP320 RCE
[dynamic programming] interval dp:p1005 matrix retrieval
The first word of JVM -- detailed introduction to JVM and analysis of runtime data area
Tensorflow 2. X realizes iris classification
[leetcode 324] swing sorting II thinking + sorting
The State Administration of Chia Tai market supervision, the national development and Reform Commission and the China Securities Regulatory Commission jointly reminded and warned some iron ores