es6语法特性进阶(1)

ECMAScript 6 最有意思的部分之一就是箭头函数。正如其名,箭头函数由 “箭头”(=>)这种新的语法来定义。
其实在别的语言中早就有了这种语法结构,不过他们叫拉姆达表达式。

箭头函数语法
箭头函数可以赋值给变量,也可以像匿名函数一样直接作为参数传递。

1
2
3
4
5
6
7
8
9
10
var sum = (num1, num2) =>{
return num1 + num2;
}
console.log(sum(3, 4));
//前面的箭头函数等同于下面的传统函数
var add = function (num1, num2) {
return num1 + num2;
}
console.log(add(2, 4))

如果函数体内只有一行代码,则包裹函数体的 大括号 ({ })完全可以省略。如果有return,return关键字也可以省略。
如果函数体内有多条语句,则 {} 不能省略。

1
2
3
4
5
6
7
8
9
10
var sum = (num1, num2) => num1 + num2;
console.log(sum(5, 4));
//前面的箭头函数等同于下面的传统函数
var add = function (num1, num2) {
return num1 + num2;
}
console.log(add(2, 4));
//如果这一行代码是没有返回值的,则方法的返回自也是undefined
var foo = (num1, num2) => console.log("aaa");
console.log(foo(3,4)); //这个地方的返回值就是undefined

如果箭头函数只有一个参数,则包裹参数的小括号可以省略。其余情况下都不可以省略。当然如果不传入参数也不可以省略

1
2
var foo = a=> a+3; //因为只有一个参数,所以()可以省略
console.log(foo(4)); // 7

如果想直接返回一个js对象,而且还不想添加传统的大括号和return,则必须给整个对象添加一个小括号 ()

1
2
3
4
5
6
7
8
9
var foo = ()=>({name:"lisi", age:30});
console.log(foo());
//等同于下面的;
var foo1 = ()=>{
return {
name:"lisi",
age : 30
};
}

使用箭头函数实现函数自执行

1
2
3
4
5
6
7
8
var person = (name => {
return {
name: name,
age: 30
}
}
)("zs");
console.log(person);

箭头函数中无this绑定(No this Binding)
在ES5之前this的绑定是个比较麻烦的问题,稍不注意就达不到自己想要的效果。因为this的绑定和定义位置无关,只和调用方式有关。

在箭头函数中则没有这样的问题,在箭头函数中,this和定义时的作用域相关,不用考虑调用方式

箭头函数没有 this 绑定,意味着 this 只能通过查找作用域链来确定。如果箭头函数被另一个不包含箭头函数的函数囊括,那么 this 的值和该函数中的 this 相等,否则 this 的值为 window。

1
2
3
4
5
6
7
8
9
10
11
var PageHandler = {
id: "123456",
init: function () {
document.addEventListener("click",
event => this.doSomething(event.type), false); // 在此处this的和init函数内的this相同。
},
doSomething: function (type) {
console.log("Handling " + type + " for " + this.id);
}
};
PageHandler.init();

看下面的一段代码:

1
2
3
4
5
var p = {
foo:()=>console.log(this) //此处this为window
}
p.foo(); //输出为 window对象。 并不是我想要的。所以在定义对象的方法的时候应该避免使用箭头函数。
//箭头函数一般用在传递参数,或者在函数内部声明函数的时候使用。

说明:
1.箭头函数作为一个使用完就扔的函数,不能作为构造函数使用。也就是不能使用new 的方式来使用箭头函数。
2.由于箭头函数中的this与函数的作用域相关,所以不能使用call、apply、bind来重新绑定this。但是虽然this不能重新绑定,但是还是可以使用call和apply方法去执行箭头函数的。

无arguments
虽然箭头函数没有自己的arguments对象,但是在箭头函数内部还是可以使用它外部函数的arguments对象的。

1
2
3
4
5
6
7
function foo() {
//这里的arguments是foo函数的arguments对象。箭头函数自己是没有 arguments 对象的。
return ()=>arguments[0]; //箭头函数的返回值是foo函数的第一个参数
}
var arrow = foo(4, 5);
console.log(arrow()); // 4
`

访客的ip和所在地址: 访问时间: 当前时间:

殖民 wechat
欢迎您扫一扫上面的微信公众号
打赏不在多少,请鼓励一下!