理解函数调用

函数中的两个隐含的参数

arguments和this

arguments

arguments参数是传递给函数的所有参数集合。

arguments有length属性,并且可以通过数组下标的方式访问每一个元素,但它不是数组。

arguments对象作为函数参数的别名。(避免使用,影响可读性,在严格模式下无法使用)

this

this参数:函数上下文。

函数调用

*作为一个函数,直接被调用。

此时this的值有两种可能性:在严格模式下为undefined;在非严格模式下为全局上下文(Window对象)。

*作为一个方法,关联在一个对象上,实现面向对象编程。

此时该对象会成为函数的上下文。

*作为一个构造函数,实例化一个新的对象。

想要以此方式调用,需要在前用加上关键字new。

注意区别函数构造器和构造函数。

如果构造函数返回一个对象,则该对象将作为整个表达式的值返回,而传入构造函数的this将被丢弃。

但是,如果构造函数返回的是非对象类型,则忽略返回值,返回新创建的对象。

*通过函数的apply或者call方法。

call和apply方法的第一个参数都会被作为函数的上下文,不同之处在于后续的参数。apply方法只需要一个额外的参数,也就是一个包含参数值的数组;call方法则需要传入任意数量的参数值。

强制指定回调函数的函数上下文。

解决函数上下文的问题

*使用箭头函数绕过函数上下文

箭头函数作为回调函数:箭头函数的this与声明所在的上下文的相同。

警告:箭头函数和对象字面量

在全局代码中定义对象字面量,在字面量中定义箭头函数,那么箭头函数内的this指向全局window对象。

*使用bind方法

所有函数均可以访问bind方法,可以创建并返回一个新函数,并绑定在传入的对象上。不管如何调用该函数,this均被设置为对象本身。被绑定的函数与原始函数行为一致,函数体一致。

posted @ 2020-12-04 10:43  TheWings  阅读(76)  评论(0编辑  收藏  举报