11月下旬,我安装了Node.js-v5.1.0开始学习和使用Node.js。
然而Node.js开发团队在12月发布了v5.1.1,v5.2.0,v5.3.0,16年1月又发布了v5.4.0,v5.4.1,v5.5.0。这速度,是要坐火箭才能赶上呀……
言归正传,第一次看到"=>"这个符号是在v5.4.0的api文档中。文档中频繁出现这样的代码示例:
()=>{
...
}
通过查Node.js的更新说明得知,这就是箭头函数,是ES6的新特性,Node.js从v5.4.0开始支持。
那么我们先来跟传统函数对比学习一下箭头函数的语法吧!
1、没有参数的情况
传统函数:
var funcWithoutParam = function(){
console.log('This is a function without param.');
}
var funcWithoutParam = () => {
console.log('This is a function without param.');
}
2、单个参数的情况
传统函数:
var funcWithOneParam = function(a){
console.log('This is a function with a param: a='+a);
}
箭头函数:
var funcWithOneParam = a => {
console.log('This is a function with a param: a='+a);
}
3、多个参数的情况
传统函数:
var funcWithThreeParam = function(a, b, c){
console.log('This is a function with 3 params: a='+a +', b='+b+', c='+c );
}
箭头函数:
var funcWithThreeParam = (a, b, c) => {
console.log('This is a function with 3 params: a='+a +', b='+b+', c='+c );
}
4、匿名函数
传统函数:
function(){
console.log('This is a no name function.');
}
箭头函数:
() => {
console.log('This is a no name function.');
}
箭头函数是ES6的新特性,它一定不是function的简单替代品,它们有哪些区别呢?
1、箭头函数不能用new来实例化
2、没有arguments对象
3、this不再善变
关于第3点,我们可以举个栗子。
传统函数的this很善变,作用域仅限与当前函数:
man = {
name:'lee',
init:function(){
var self = this;
var printName = function() {
console.log(self.name);
}
printName();
}
}
man.init();
man = {
name:'lee',
init:function(){
var printName = () => {
console.log(this.name);
}
printName();
}
}
man.init();