arguments和this

71 阅读2分钟

arguments和this

arguments和this是每个函数都有的,除了箭头函数,箭头函数是新出的语法

arguments

定义:arguments是个包含所有参数的伪数组(没有数组的共有属性就是伪数组)

image.png

伪数组如何变成数组呢?

Array.from()可以把任何不是数组的变成数组

this

this:this是call的第一个参数

  • 如果你不给任何条件,this默认指向window
  • 这是JS的糟粕,我们不用这个默认的this.window

image.png

  • 如果你要指定一个this,用fn.call()

如果你传的这个this不是对象,js会自动给你封装成对象 image.png

怎么才能阻止自动封装成对象呢? 声明函数时,加上一句'use strict'(翻译为不要随便加东西)

image.png

如何传arguments

调用fn即可传arguments fn(1,2,3)

那么arguments就是[1,2,3]伪数组

如何传this

目前只能用fn.call(xxx,1,2,3)传this和arguments

而且xxx会被自动转化成对象(js的糟粕)

image.png 其中,1就是this

2,3,4是arguments

案例

我们在写一个函数时,我们需要得到一个对象,但是我们并不知道这个对象叫什么名字,有可能这个对象还没出生,怎么在不知道一个对象的名字的情况下拿到一个对象的引用呢

土办法,用参数 image.png

两种调用:

小白调用法 person.sayHi() 会自动把person传到函数里,作为this

大师调用法 person.sayHi.call(person) 需要自己手动把person传到函数里,作为this

不用this image.png

用this

image.png

image.png

image.png 这个this的值是不确定的,是用大师调用法传进来的,这个函数的作用就是遍历当前数组,那这个当前数组在哪?就是this,this可以引用未来的那个当前数组

image.png

还有一种方法: image.png

可以看一下知乎方应杭老师的this讲解 this 的值到底是什么?一次说清楚 - 知乎 (zhihu.com)