ES6箭头函数(Arrow Functions)

作者: _LG_ | 来源:发表于2016-10-05 21:02 被阅读513次

箭头函数是什么?(What)

箭头函数 (Arrow Functions)也称“胖箭头函数”,是ES6全新的特性。是个简写的函数表达式,拥有词法作用域的this。此外,箭头函数总是匿名的。(词法作用域就是一个变量的作用在定义的时候就已经被定义好,当在本作用域中找不到变量,就会一直向父作用域中查找,直到找到为止。)

箭头函数的语法(How)

  • ()=>{return 1;}

函数无参数,返回值为1

  • (x)=>x*x;

返回值为参数的平方,当函数体只有一条语句时,则可以省略大括号{},默认返回该表达式的值。

  • x=>x*x;

只有一个参数时,则可以省略小括号()

  • ()=>{……return 1;}

返回值为1。(使用块语句的箭头函数不会自动返回值,需要使用return语句将所需的值返回)

  • ()=>({})

返回值为对象

箭头函数的特性

1、typeof运算符和普通的函数一样

let commFunc = () => {};
console.log(typeof commFunc);

输出为function

let arrowFunc = () => {};
console.log(typeof arrowFunc);

输出也为function
从此可以看出箭头函数的类型和普通的函数一样都为function

2、instanceof也返回true,表明是Function的实例

let func = () => {};
console.log(func instanceof Function);

输出为true,由此可以看出箭头函数也是Function的实例

3、箭头函数中的this继承外围作用域

let person = {
    name: "galler",
    say: () => {
        console.log(this);
        console.log(this.name);
    }
};
person.say();

this的值为"{}"或windowthis.name的值为undefined或""(空字符串)。将上面的这段代码写在文件中,在node环境中运行,this的值输出为"{}",这个空对象就是exports,因为没有写exportsexports就默认指向module.exports,而module.exports就是个空对象。但是在命令行中运行上面代码(依然是node环境中),则this指向global对象(这些有可能偏离中心,但是大家可以试试,在这段代码前加上exports.name = "susan",此时的this指向{"name","susan"}对象,this.name的值就是susan

let person = {
    name: "galler",
    speak: function() {
        console.log(this); 
        console.log(this.name); 
    }
};
person.speak();

this的值为person对象,this.name的值为galler。

小结:箭头函数本身没有this。在上面的demo中根据词法作用域,于是向上查找this,则发现this指向window对象(浏览器环境)或者{}(Node环境中),由于window和{}对象没有name属性,则this.name为""(浏览器环境)或者undefined(Node环境)

4、返回对象用小括号括起来

let person = () => {    
    name:"galler"
}
console.log(person()); 

输出为undefined。此时的"{}"表明函数的起始位置和结束位置,由于该函数没有返回值,所以被调用时值为undefined

let person = () => ({    
    name:"galler"
});
console.log(person());

输出为{name:"galler"}。 此时"{}"表示定义一个对象。用"()"括起来表示是一个表达式,默认返回该对象。

5、箭头函数中不能使用new

let Person = (name) => {
    this.name = name;
};
let one = new Person("galler");

运行该程序,则出现TypeError: Person is not a constructor

6、arguments

function person() {
    console.log(arguments);
}
person(1);

一般的函数使用arguments,在浏览器中输出为一个数组:[1],在Node环境中输出为一个对象:{'0':1}

let person = () => {    
    console.log(arguments);
};
person("galler");

箭头函数使用arguments,在浏览器环境中,则出现ReferenceError,在Node环境中输出{"0":{},……}
由此可以得出,箭头函数与普通函数的再一个区别:不能使用arguments对象。

7、没有原型

let person = () => {}
console.log(person.prototype); 

输出为undefined。由此可以看出箭头函数没有原型。

箭头函数产生的目的

  • 简洁语法
  • 与父作用域共享关键字this

箭头函数的优点

  • 使用箭头函数比普通函数少些动词,如:functionreturn
  • this提前定义,从上下文可以捕获this

注意:箭头函数内容实体中不能使用statement作为表达式expression。

事物都是有两面性的,所以箭头函数的优点即缺点。代码太过简单,导致不好阅读,this提前定义。

相关文章

  • ES6箭头函数简介

    @(JS技巧)[ES6|箭头函数] ES6箭头函数(Arrow Functions) ES6可以使用“箭头”(=>...

  • es6语法小计

    ES6 箭头函数Arrow functions: this.setState(...

  • ES6箭头函数(Arrow Functions)

    箭头函数是什么?(What) 箭头函数 (Arrow Functions)也称“胖箭头函数”,是ES6全新的特性。...

  • ES6-函数

    一、 箭头函数 ES6 介绍了一种新的定义的函数的方法,叫 Arrow Functions ,箭头函数,认识一下...

  • JS:箭头函数(ES6标准)

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

  • JavaScript ES6箭头函数指南

    前言 胖箭头函数(Fat arrow functions),又称箭头函数,是一个来自ECMAScript 2015...

  • Javascript 箭头函数

    箭头函数 ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 为什么叫Arrow Funct...

  • 箭头函数

    箭头函数 ES6标准新增了一种新的函数:Arrow Function(箭头函数)。 为什么叫Arrow Funct...

  • javascript箭头函数、匿名函数

    箭头函数 箭头函数(Arrow Function)是ES6标准新增的函数,基本格式:(...参数)=>{函数声明}...

  • JavaScript中的箭头函数详解

    什么是箭头函数? ES6标准新增了一种新的函数:Arrow Function(箭头函数)。箭头函数相当于匿名函数,...

网友评论

  • _LG_:谢谢
  • 不知所语:加深了对箭头函数的理解,写的很棒,期待下一篇:smile::smile:

本文标题:ES6箭头函数(Arrow Functions)

本文链接:https://www.haomeiwen.com/subject/rgnsyttx.html