arguments和this
arguments和this是每个函数都有的,除了箭头函数,箭头函数是新出的语法
arguments
定义:arguments是个包含所有参数的伪数组(没有数组的共有属性就是伪数组)
伪数组如何变成数组呢?
用Array.from()可以把任何不是数组的变成数组
this
this:this是call的第一个参数
- 如果你不给任何条件,this默认指向window
- 这是JS的糟粕,我们不用这个默认的this.window
- 如果你要指定一个this,用
fn.call()
如果你传的这个this不是对象,js会自动给你封装成对象
怎么才能阻止自动封装成对象呢? 声明函数时,加上一句'use strict'(翻译为不要随便加东西)
如何传arguments
调用fn即可传arguments fn(1,2,3)
那么arguments就是[1,2,3]伪数组
如何传this
目前只能用fn.call(xxx,1,2,3)传this和arguments
而且xxx会被自动转化成对象(js的糟粕)
其中,1就是this
2,3,4是arguments
案例
我们在写一个函数时,我们需要得到一个对象,但是我们并不知道这个对象叫什么名字,有可能这个对象还没出生,怎么在不知道一个对象的名字的情况下拿到一个对象的引用呢
土办法,用参数
两种调用:
小白调用法
person.sayHi()
会自动把person传到函数里,作为this
大师调用法
person.sayHi.call(person)
需要自己手动把person传到函数里,作为this
不用this
用this
这个this的值是不确定的,是用大师调用法传进来的,这个函数的作用就是遍历当前数组,那这个当前数组在哪?就是this,this可以引用未来的那个当前数组
还有一种方法:
可以看一下知乎方应杭老师的this讲解 this 的值到底是什么?一次说清楚 - 知乎 (zhihu.com)