doubleyong
管理员
管理员
  • 最后登录2026-05-25
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:7076回复:0

ES6 “箭头”函数详解

楼主#
更多 发布于:2017-11-15 10:45

来源:https://segmentfault.com/a/1190000012004337

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;
};

//若你想使用标准的函数体,或者函数体内可能有更多的语句要执行,则要用大括号将函数体括起来,并明确定义返回值。 var sum = (num1, num2) => { return num1 + num2; }

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

//以上例子出处  [url=http://var f = () => 5; // 等同于 var f = function () { return 5 };   var sum = (num1, num2) => num1 + num2; // 等同于 var sum = function(num1, num2) {   return num1 + num2; };  //若你想使用标准的函数体,或者函数体内可能有更多的语句要执行,则要用大括号将函数体括起来,并明确定义返回值。 var sum = (num1, num2) => { return num1 + num2; }  //如果箭头函数直接返回一个对象,必须在对象外面加上括号。 var getTempItem = id => ({ id: id, name:]https://www.cnblogs.com/huansky/p/5684867.html[/url]
至此,我们已经理解怎么用它了;那么它跟普通的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对象 找到定义时的this是指向obj的(即obj.fn 的this);
        },
        do:function (fn) {
            fn();
        }
    };
    obj.fn();

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

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

普通函数的this 可以这样概括(来自知乎)

函数执行时,this 总是指向调用该函数的对象,规则可以简单概括如下:
  1. 有对象就指向调用对象
  2. 没调用对象就指向全局对象
  3. 用new构造就指向新对象
  4. 通过 apply 或 call 或 bind 可以改变this的指向
其实也就是另一位答主说的根据点的左边是什么东西来判断。

最新喜欢:

饼干.饼干.
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号