JS学习-箭头函数

来源:互联网 发布:机器人声音制作软件 编辑:程序博客网 时间:2024/05/21 06:20

ES6标准新增了一种新的函数:Arrow Function(箭头函数)
类似于Swfit中的闭包形式

x => x * x;//等价于function (x) {    return x * x;}

如果参数不止一个:

// 两个参数:(x, y) => x * x + y * y// 无参数:() => 3.14// 可变参数:(x, y, ...rest) => {    var i, sum = x + y;    for (i=0; i<rest.length; i++) {        sum += rest[i];    }    return sum;}

this

箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。

回顾前面的例子,由于JavaScript函数对this绑定的错误处理,下面的例子无法得到预期结果

var obj = {    birth: 1990,    getAge: function () {        var b = this.birth; // 1990        var fn = function () {            return new Date().getFullYear() - this.birth; // this指向window或undefined        };        return fn();    }};

现在,箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj:

var obj = {    birth: 1990,    getAge: function () {        var b = this.birth; // 1990        var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象        return fn();    }};obj.getAge(); // 25