在调用函数时,浏览器每次都会传递传递两个隐含的参数,一个是this,一个是arguments。
this
函数的上下文对象,不同的情况会有不同的值。
-
以函数的形式调用,this永远都是Window对象。
-
以方法的形式调用,this就是调用该方法的对象。
-
以构造函数的形式调用,this就是新创建的对象。
-
使用call和apply调用时,可以指定对象。
call()和apply()函数:
- 这两个方法都是函数对象的方法,需要通过函数对象来调用。
- 当函数调用call()和apply()都会运行该函数。
上图目前三个具有一样的效果。
但是call和apply可以指定第一个参数为this对象。
call方法和apply方法的区别是,call方法可以把参数在第一个参数之后依次传递,而apply要以数组对象的形式传递。
arguments
封装实参的对象arguments。
- 是一个类数组对象,可以通过索引获取数据,也可以获取长度。
- 在调用函数时,所传递的实参都会在arguments中保存。
- arguments.length可以获取实参的数量。
- 我们即使不定义实参,也能从arguments获取传过来的实参。
- arguments[0]表示第一个实参,arguments[1]表示第二个实参…。