Javascript 基础: 箭头函数与arguments
es6中箭头函数有无作用域,this指向,能否使用arguments,为什么?
关于箭头函数 与 arguments
- 箭头函数有作用域(词法作用域),词法作用域简单来讲就是,一切变量(包括this)都根据作用域链来查找。
- 箭头函数中的
this
因为绑定了词法作用域,所以始终指向自身外的第一个this
(由于自身没有声明this
,所以会去作用域链上找this
),也就是始终等于调用它的函数的this
(以为这个this
离它最近)。 - 严格模式下不允许使用
arguments
(规定),并且,普通函数里arguments
代表了调用时传入的参数,但是箭头函数不是,箭头函数会把arguments
当成一个普通的变量,顺着作用域链由内而外地查询(词法作用域) arguments
可以用...rest
取代,所以完全没必要追求argument
。
看下 es6
的原文
this
、super
、new.target
都没有自己的,全都来自父作用域
An Arrow Function does not define local bindings for arguments
, super
, this
, or new.target
. Any reference to arguments
, super
, this
, or new.target
within an Arrow Function must resolve to a binding in a lexically enclosing environment. Typically this will be the Function Environment of an immediately enclosing function. Even though an Arrow Function may contain references to super
, the function object created in step 4 is not made into a method by performing MakeMethod. An Arrow Function that references super
is always contained within a non-ArrowFunctionand the necessary state to implement super
is accessible via thescopethat is captured by the function object of the Arrow Function.