人,是懒的。当我还在我母上大人肚子里因为懒的动而被她怀疑是否胎死腹中是我就知道。而箭头函数的出现,也也我懒得动一样,是一种懒的行为表现。(这一段没有意义。)
箭头函数——基本写法
let fn = name => name
// === 等价于
let fn = (name) => {
return name;
}
立即执行箭头函数:
let LJ = (now => now)(new Date());
// === 等价于
let LJ = ((now) => {
return now;
})(new Date());
箭头函数的几个特征:
1、没有this、arguments、super 和prototype
2、不能new操作符执行,没有constructor的能力,不能被用作构造函数(想一想谁会用匿名函数做构造函数呢),更多被用来计算,数据流向,方便javascript优化代码;
3、箭头函数具有绑定this的能力,箭头函数中绑定的this是箭头函数的非箭头函数产生的父级作用域的this;
let test = (name) => {
// console.log(arguments); // arguments is not defined;
console.log(this); // this 指向window
}
test('angela');
补充:关于this的绑定;(权重 new > 显示绑定 > 隐式绑定 > 默认绑定)
1、默认绑定(空执行函数,函数单纯指向window)
2、隐式绑定(谁调用,this指向谁)
3、显示绑定(call、apply、bind)
4、new 绑定
var a = 'window';
let obj = {
a : 'obj',
show: function () {
console.log(a,this.a);
},
showName: () => console.log(a,this.a),
showN: function (){
let show = () => {
console.log(a,this.a);
}
show();
}
}
obj.show(); // 谁调用,this 指向谁 window obj
obj.showName(); // window window箭头函数 this指向 最近的非箭头函数的父级作用域中的this,此处为window
obj.showN(); //window obj show 为箭头函数 this 指向 obj
var obj1 = obj.show.bind(window);
obj1(); //window window 改变show函数的this指向为window
var obj2 = obj.showName.bind(obj);
obj2(); //window window 改变showName函数的this 指向为obj,箭头函数已经bind一次,无法改变
注意:若 最外层 var a 改成 let a 或 const a,则 window.a 为undefined,因为let 和const声明的全局变量不属于window;