前言
call、bind、apply 都是 JavaScript 中用于改变函数执行上下文(即 this 指向)的方法。
语法:函数.call()、函数.call()、函数.call()
call、bind、apply的区别
一、传参方式不同
三者第一个参数都是this要指向的对象,如果如果没有这个参数或参数为undefined或null,则默认指向全局window。
三者都可以传参,但是apply是数组,而call是参数列表,且apply和call是一次性传入参数,而bind可以分为多次传入。
fn.call(thisArg, arg1, arg2, …) // 接收参数列表
fn.apply(thisArg, argsArray) // apply 接收数组参数
fn.bind(thisArg, arg1, arg2, …) // 接收参数列表
二、执行方式不同
all和apply是改变后页面加载之后就立即执行。
bind 是返回绑定this之后的函数,便于稍后调用。
三、修改this的性质不同
call、apply只是临时的修改一次,也就是call和apply方法的那一次;当再次调用原函数的时候,它的指向还是原来的指向。
bind是永久修改函数this指向,但是它修改的不是原来的函数;而是返回一个修改过后新的函数,此函数的this永远被改变了,绑定了就修改不了。