1、this
- 普通函数,this指向最后一次
调用
它的对象 - 箭头函数,没有this,需要通过作用域链来确定this的指向,this绑定的是最近的一次
定义
的非箭头函数
let a = {
name: 'a',
fn: function () {
setTimeout(function () {
console.log('普通函数', this)
}, 20)
setTimeout(() => {
console.log('箭头函数', this)
}, 20)
}
}
a.fn() // 普通函数' this => window 箭头函数' this => a
2、arguments对象
- 普通函数,arguments对象是所有参数的内容
- 箭头函数,没有arguments对象,但可以访问到外围函数的 arguments 对象
function a(a1, a2) {
console.log('a', arguments)
b(a1)
function b(a1) {
console.log('b', arguments)
setTimeout(() => {
console.log('c', arguments)
}, 10)
}
}
a(1,2) // a=>[1,2] b=>[1] c=>[1]
3、通过new 关键字调用
- 普通函数,可以通过new关键字的调用
- 箭头函数,不可以通过new关键字的调用,不能作为构造函数调用
javascript函数有两个call和construct
当通过new调用函数时,先执行construct方法,创建实例对象,然后再执行函数体,将this绑定到实例对象上
直接调用函数时,直接执行call方法,执行函数体
箭头函数没有construct,不能被作为构造函数使用,如果通过new调用时候,会报错
3、没有原型(prototype) 没有super
箭头函数,不可以通过new关键字的调用,所以没有构建原型的需求,自然也就不存在protetype这个属性,也不能通过super访问原型的属性