ES6箭头函数中的this
ES6箭头函数中的this
ES6 开始引入了箭头函数,让代码看起来更简洁了。但是箭头函数传统函数不仅仅是写法上的不同,在this和arguments的处理方式也有着很大的区别。
this是局部的
在箭头函数中this是局部的,它跟其它局部变量的常规处理是一致的。看下面的例子:
1 | function outer (age) { |
这例子中我们函数共有三层嵌套,里面是两层箭头函数,这里我们在最里层箭头函数内部引用了this和一个局部变量age。对局局部变量age的查找规则我们很清楚,先在当前作用域查找,如果没有就去父作用域查找,一直到最顶层(window、global)。在箭头函数中对this的查找规则和age是一样的,箭头函数本身并没有一个自己的this,它要一直往上层找,直到找到this为止。
同样,对于arguments的处理也是一样的。需要注意的一点是箭头函数本身是没有arguments变量的。
注意事项
箭头函数虽然写起来更加简单,但是我们不能不加区分的在任何地方都用箭头函数替代传统函数,特别是在函数内部涉及this绑定时。看下面的例子:
1 | function sayName(fn) { |
也正是这个原因Koa 1.x中我们可以中间件中使用this引用到context,而在Koa 2.x中需要将context作为参数传到中间件内部。
1 | // koa1.x |
参考
本站采用「署名 4.0 国际」进行许可。