node.js学习笔记(24) 箭头函数

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();


箭头函数this取决于在哪儿定义,不可变:
man = {
    name:'lee',
    init:function(){
        var printName = () => {
            console.log(this.name);
        }
        printName();
    }
}
man.init();


上一篇:Spring 字符编码过滤


下一篇:serialVersionUID的作用