`

js 箭头函数

    博客分类:
  • js
 
阅读更多

参考:js箭头函数

 

箭头函数

ES6标准新增了一种新的函数:Arrow Function(箭头函数)。

为什么叫Arrow Function?因为它的定义用的就是一个箭头:

x => x * x

上面的箭头函数相当于:

function (x) {
    return x * x;
}

箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种像上面的,只包含一个表达式,连{ ... }return都省略掉了。还有一种可以包含多条语句,这时候就不能省略{ ... }return

x => {
    if (x > 0) {
        return x * x;
    }
    else {
        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;
}

如果要返回一个对象,就要注意,如果是单表达式,这么写的话会报错:

// SyntaxError:
x => { foo: x }

因为和函数体的{ ... }有语法冲突,所以要改为:

// ok:
x => ({ foo: x })

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

如果使用箭头函数,以前的那种hack写法:

var that = this;

就不再需要了。

由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略:

var obj = {
    birth: 1990,
    getAge: function (year) {
        var b = this.birth; // 1990
        var fn = (y) => y - this.birth; // this.birth仍是1990
        return fn.call({birth:2000}, year);
    }
};
obj.getAge(2015); // 25

 

 

分享到:
评论

相关推荐

    浅析JavaScript 箭头函数 generator Date JSON

    ### 知识点一:JavaScript 箭头函数 ES6(ECMAScript 2015)标准中引入了一种新的函数表达式——箭头函数(Arrow Function)。箭头函数提供了一种更简洁的函数写法,它主要有以下几个特点: 1. **简洁语法**:箭头...

    JS箭头函数和常规函数之间的区别实例分析【 5 个区别】

    在JavaScript编程中,函数是核心组成部分,而箭头函数和常规函数是两种常见的函数定义方式。它们之间存在显著的区别,这些差异在实际开发中具有重要的意义。以下是五个关键区别以及相关实例分析: 1. **this值的...

    JS ES6箭头函数

    JavaScript ES6中的箭头函数是语言的一个重要更新,它提供了更简洁、更直观的语法来定义函数。在本文中,我们将深入探讨箭头函数的基本概念、语法特性、作用域规则以及与传统函数的区别。 ### 1. 箭头函数的基本...

    04-箭头函数.rar

    总的来说,"04-箭头函数.rar"的内容应该涵盖了JavaScript中的箭头函数基础知识,以及在Vue.js项目中如何有效利用这些函数,对于想要提升前端开发技能的个人来说,这是一份宝贵的学习资源。通过深入理解箭头函数,你...

    JavaScript箭头函数中的this详解

    JavaScript箭头函数与普通函数不只是写法上的区别,它们还有一些微妙的不同点,其中一个不同点就是this。 箭头函数没有自己的this值,箭头函数中所使用的this来自于函数作用域链。 这句话很简单,不

    深入理解Javascript箭头函数中的this

    JavaScript中的箭头函数是ES6引入的一个重要特性,它的出现主要解决了传统函数中`this`指针的问题。在JavaScript中,`this`的值取决于函数的调用方式,而不是定义时的位置,这经常导致开发者在处理`this`时遇到困扰...

    浅析JavaScript 箭头函数 generator Date JSON_.docx

    这篇文档主要探讨了ES6(ECMAScript 2015)中引入的一些新特性,包括箭头函数、生成器(generator)、Date对象以及JSON。这些特性极大地丰富了JavaScript的功能,使得代码更加简洁和高效。 首先,箭头函数是ES6中的...

    【JavaScript源代码】JavaScript中箭头函数与普通函数的区别详解.docx

    JavaScript中的箭头函数和普通函数在使用上有显著的差异,这些差异主要体现在以下几个方面: 1. **函数定义的简洁性**: - 箭头函数的语法更紧凑,可以视为匿名函数的一种简写形式。如果函数体只包含一个表达式,...

    Javascript中 带名 匿名 箭头函数的重要区别(推荐)

    在JavaScript中,有三种主要的函数定义方式:带名函数、匿名函数和箭头函数。每种函数类型都有其特定的用途和特点。 1. **带名函数**: 带名函数在定义时有一个明显的函数名称,例如`function abs(x) {...}`。这种...

    js代码-014面试题--普通函数与箭头函数的区别

    JavaScript是Web开发中不可或缺的一部分,其语法特性多样且灵活,其中普通函数与箭头函数是两种常见的函数定义方式。在JavaScript的世界里,理解和掌握它们之间的区别对于开发者来说至关重要,尤其是在面试过程中,...

    深入理解JavaScript 箭头函数

    ES6标准引入了箭头函数,这是一种新的编写函数表达式的方式,它使用一个箭头(=&gt;)来定义。...对于希望编写更优雅、更符合函数式编程范式的JavaScript代码的开发者来说,掌握箭头函数是非常必要的。

    箭头函数基本语法.md

    es6箭头函数提供了一种更加简洁的函数书写方式

    JavaScript箭头函数_动力节点Java学院整理

    JavaScript箭头函数是在ECMAScript 6(ES6)标准中新增的一种函数表达式,它的引入为JavaScript编程带来了便利和语法上的简化。箭头函数的定义方式借鉴了其他编程语言中的类似功能,比如C#的Lambda表达式和Python的...

    JavaScript ES6箭头函数使用指南

    JavaScript ES6箭头函数是ECMAScript 2015引入的一个重要特性,它提供了更加简洁的函数定义方式,同时也改变了传统函数中`this`的指向规则。箭头函数的出现,部分原因是受到CoffeeScript的影响,其核心在于简化代码...

Global site tag (gtag.js) - Google Analytics