箭头函数:语义化函数:
(箭头函数的来源:lambda表达式、c++、java、coffeeScript (胖箭头、瘦箭头)、js)
基础语法:
<script>
//传统函数
function foo(a, b) {
console.log(a * b);//结果为6
}
foo(2, 3);
// 箭头函数
var foo1 = (a, b) => {
console.log(a * b);//结果为9
}
foo1(3, 3);
</script>
注意的点:
参数传递:
①若参数只有一个,小括号可以省略。(反之,参数有0个或者两个以上必须有())
var foo1 = (a) => {
console.log(a);
}
foo1(3);
//参数只有一个时,可以省略():
var foo1 = a => {
console.log(a);
}
foo1(3);
②当{ } 中只有一条逻辑语句时,{ }可以省略。(反之,若两条及以上语句时,必须加{ })
var foo1 = a => console.log(a);
foo1(3);
//当语句中有return时,必须加{ },或者把return 删除。
EG:将普通函数简化为箭头函数:
let arr = [1, 2, 3];
console.log(arr.map(function(x){
return x * x;
}));
let arr = [1, 2, 3];
console.log(arr.map(x => x * x));
注意:
this指向:
EG:当点击页面时,控制台输出“click”:
//方法一
var obj = {
init: function() {
// console.log(this);
// this指向obj
var that = this;
document.addEventListener('click', function(event) {
// console.log(this); 原this指向document,先在that指向了obj
that.output(event.type);
})
},
output: function(value) {
console.log(value);
}
}
obj.init();
//方法二
var obj = {
init: function() {
document.addEventListener('click', function(event) {
this.output(event.type);
}.bind(this))
// bind()函数可以改变当前this指向
},
output: function(value) {
console.log(value);
}
}
obj.init();
箭头函数:可以理解为没有this指向,其this指向是借用父级this;且这个this指向是不可被更改的。
var obj = {
init: function() {
document.addEventListener('click', (event) => {
this.output(event.type);
})
},
output: function(value) {
console.log(value);
}
}
obj.init();
var obj = {
init: function() {
console.log(this);
// this指向obj
}
}
obj.init();
使用箭头函数: (找父级作用域的this,且this指向不可更改)
var obj = {
init: () => {
console.log(this);
// this指向window
}
}
obj.init();//this指向是不可更改的
不能使用arguments:(报错)
不能当做构造函数:(报错)
注:要考虑什么时候使用箭头函数。