一、call:传入的参数为依次传入
let a = [1,43,2,56,34,23,98,14];
Math.max.call(a,1,43,2,56,34,23,98,14); //第一个参数为:改变this指向为a这个变量,如果目标参数没有this关键字吗,可以省略。反之则必须书写
Math.min.call(a,1,43,2,56,34,23,98,14); //第二个参数为:传入的参数,需要依次传入值
--> 98 1
二、apply:传入的参数为数组的形式
let a = [1,43,2,56,34,23,98,14];
Math.max.apply(a,a); //第一个参数为:改变this指向为a这个变量
Math.min.apply(a,a); //第二个参数为:传入的参数,需要传入一个数组
--> 98 1
三、bind:延时执行,函数需要调用才能执行,不能与上面一样立即执行
let a = [1,43,2,56,34,23,98,14];
let max = Math.max.bind(a); //参数为:改变this指向为a这个变量
let min = Math.min.bind(a); //此时仅仅定义了函数还未执行
console.log(max(1,43,2,56,34,23,98,14)) //需要调用才能执行函数,参数为依次传入
console.log(min(1,43,2,56,34,23,98,14))
--> 98 1
//或
console.log(Math.max.bind(a)(1,43,2,56,34,23,98,14)); //效果一致