es6箭头函数
箭头函数用 => 符号来定义。
箭头函数相当于匿名函数,所以采用函数表达式的写法。
左边是传入函数的参数,右边是函数中执行的语句。
var sum =(x,y) =>{return x+y;}
//相当于
var sum = function(x,y){
return x+y;
}
上面是完整的写法,左边小括号,右边大括号,而下面的情况可以简写:
(1)当要执行的代码块只有一条return语句时,可省略大括号和return关键字:
var sum = (x,y) => x+y;
(2)当传入的参数只有一个时,可以省略小括号:
var ji = x => x*x
和上面一样 相当于一个函数 的参数 为 x return x * x 的值
(3)当不需要参数时,使用空的圆括号:
var one = () => 1;
同上 所诉 差不多的 意思!!!
需要注意的是, 箭头函数没有自己的this、arguments、super、new.target,它们分别指向外层函数的相应变量。
以前在ES5中使用this有点麻烦,这种问题很常见:
var a = 1;
function test(){
console.log(this.a); // 2
var that = this;
var test2 = function(){
console.log(this.a) // 1
console.log(that.a) // 2
}
test2();
}
var obj ={
a:2,
fn:test
};
obj.fn();
这就需要在嵌套函数外层使用that = this,然后内层使用that(备份this),相信大家 都 用过吧;
箭头函数中的this指向的是定义时的this,而不是执行时的this。也就是说箭头函数没有自己的this,其内部的this绑定到它的外围作用域。对象内部的箭头函数若有this,则指向对象的外围作用域。
var a = 1;
function test(){
console.log(this.a); // 2
var test2 = () => {
console.log(this.a); // 2
}
test2();
}
var obj ={
a:2,
fn:test
};
obj.fn();
是不是 觉得 有点 简单 那就上点 面试题:
window.color = "red";
//let 声明的全局变量不具有全局属性,即不能用window.访问
let color = "green";
let obj = {
color: "blue",
getColor: () => {
return this.color;//this指向window
}
};
let sayColor = () => {
return this.color;//this指向window
};
obj.getColor();//red
sayColor();//red
箭头函数无法使用 call()或 apply()来改变其运行的作用域。
window.color = "red";
let color = "green";
let obj = {
color: "blue"
};
let sayColor = () => {
return this.color;
};
sayColor.apply(obj);//red