面试题温故而知新的好吧!-->call 和apply & bind 的异同点

238 阅读1分钟

一.面试必问: call 和 apply 和 bind三者区别:

1.共同点:

1.都是用来改变函数的this对象的指向的

2.第一个参数都是this要指定的对象

3.都可以利用后续参数传参

4.都可以上下文调用

2.不同点:

(1)传参方式不同:call是按照顺序传参,apply是按照数组/伪数组传参

(2)执行机制不同:call和apply是会立即执行函数,而bind不会立即执行而是修改this的新函数

二.this常见的三种指向 与 call\apply\bind修改后的:

1.环境对象 this : 谁'调用'我,我就指向谁

普通函数; 函数名() this指向window

对象方法: 对象名.方法名() this指向对象

构造函数; new 函数名() this指向new创建实例对象

2.上下文调用 : 修改函数内部的this

2.1 函数名.call(修改后的this,形参1,形参2…………)

2.2 函数名.apply(修改后的this, 数组或伪数组 )

2.3 函数名.bind(修改后的this)

  • 不会立即执行函数,而是得到一个修改this之后的新函数。

  • bind一般用于修改: 定时器函数、事件处理函数

image.png

注:let arr1=Array.from(obj) (代替了apply)

3. 应用场景: bind:一般作用于:定时器函数,事件处理函数

image.png
看得出来修改了this的指向,更换了里面this的内容