理解ES6 “箭头”函数(=>)

ES6允许使用“箭头”(=>)定义函数。

var f = v => v;

等同于:

var f = function(v) {
  return v;
};

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

var f = () => 5;
// 等同于
var f = function () { return 5 };


var sum = (num1, num2) => num1 + num2;
// 等同于
var sum = function(num1, num2) {
  return num1 + num2;
};

//如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
var sum = (num1, num2) => { return num1 + num2; }

//如果箭头函数直接返回一个对象,必须在对象外面加上括号。
var getTempItem = id => ({ id: id, name: "Temp" });

//以上例子出处  https://www.cnblogs.com/huansky/p/5684867.html

至此,我们已经理解怎么用它了;那么它跟普通的function定义函数最大的区别是什么?

箭头函数中的 this

箭头函数 中的 this,指向的是它定义时所在的this;实际上,箭头函数没有自己的this;它的作用域是词法作用域,会跟着作用域链找到最近的一个this引用;

var name = 456
var obj = {
        name:'123',
        fn:function () {
            console.log(this.name);//123 对象的属性方法中的this 指向对象。
            setTimeout(function () {
                console.log(this.name)//456 匿名函数的 this 指向window。
            },1000);
            setTimeout(()=>{console.log(this.name)},2000);//123 找到this是指向obj的;
            obj.do(()=>{console.log(this)});//obj对象 找到do的this是指向obj的;
        },
        do:function (fn) {
            fn();
        }
    };
    obj.fn();

匿名函数的 this 始终是指向window 的

var obj = {
          fn:function () {
            (function () {
                console.log(this); //window
            })();
            console.log(this); //obj
        }
    }
    obj.fn();
相关文章

相关标签/搜索