ES6- 箭头函数的使用
Posted congxueda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6- 箭头函数的使用相关的知识,希望对你有一定的参考价值。
ES6可以使用“箭头”(=>)定义函数
语法
首先是写法上的不同:
// es5 var fn = function (x, y) { return x + y; } // es6 箭头函数写法,当函数直接被return时,可以省略函数体的括号 const fn = (x, y) => x + y; // es5 var foo = function () { var x = 10; var y = 20; return x + y; } // es6 const foo = () => { const x = 10; const y = 20; return x + y; }
ps:箭头函数可以替换函数表达式,但是不能替换函数声明
其次还有一个至关重要的一点,那就是箭头函数中,没有this。如果你在箭头函数中使用了this,那么该this一定就是外层的this。
ES5
var name = "window"; var obj = { name: "kxy", sayName: function () { console.log(this.name); } }; obj.sayName(); //kxy
使用ES6
var name = "window"; var obj = { name: "kxy", sayName: () => { console.log(this.name); } }; obj.sayName(); //window
换一种写法
var name = "window"; var obj = { name: "kxy", sayName: function () { setTimeout(() => { console.log(this.name); }, 1000); } }; obj.sayName(); //kxy
编译后ES5:
var name = "window"; var obj = { name: "kxy", sayName: function sayName() { var _this = this; // 注意这里 setTimeout(function () { console.log(_this.name); }, 1000); } }; obj.sayName(); //kxy
箭头函数和普通函数区别
不能作用构造函数,不能使用new
箭头函数不绑定arguments,取而代之用rest参数...
箭头函数不绑定this,会捕获其所在的上下文的this值,作为自己this值
call 或 apply 方法调用函数,只是传入参数而已 对this 并没有影响。
箭头函数没有原型属性
箭头函数没有它自己的this值,箭头函数内的this值继承自外围作用域。在箭头函数中调用 this 时,仅仅是简单的沿着作用域链向上寻找,找到最近的一个 this 拿来使用
This的指向 (用法)(this 阮一峰)
this
是 javascript 语言的一个关键字。
它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。
function test() { this.x = 1; }
上面代码中,函数test
运行时,内部会自动有一个this
对象可以使用。
那么,this
的值是什么呢?
函数的不同使用场合,this
有不同的值。总的来说,this
就是函数运行时所在的环境对象。
下面分四种情况,详细讨论this
的用法。
情况一:纯粹的函数调用
这是函数的最通常用法,属于全局性调用,因此this
就代表全局对象。请看下面这段代码,它的运行结果是1。
var x = 1; function test() { console.log(this.x); } test(); // 1
情况二:作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this
就指这个上级对象。
var obj = { x: 1, m: function () { console.log(this.x); } } obj.m(); // 1
情况三 作为构造函数调用
谓构造函数,就是通过这个函数,可以生成一个新对象。这时,this
就指这个新对象
function Test() { this.x = 1; } var obj = new Test(); obj.x // 1
运行结果为1。为了表明这时this不是全局对象,我们对代码做一些改变
var x = 2; function Test() { this.x = 1; } var obj = new Test(); x // 2
情况四 apply 调用
apply()
是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this
指的就是这第一个参数。
var x = 0; var obj = { x: 1, m: function () { console.log(this.x); } } obj.m.apply(); // 1
apply()
的参数为空时,默认调用全局对象。因此,这时的运行结果为0
,证明this
指的是全局对象。
如果把最后一行代码修改为
obj.m.apply(obj); //1
运行结果就变成了1
,证明了这时this
代表的是对象obj
。
以上是关于ES6- 箭头函数的使用的主要内容,如果未能解决你的问题,请参考以下文章