在JavaScript中,每个函数都有两个非继承而来的函数apply()和call(),它们的作用呢就是改变函数运行时的上下文。
本质上事改变了函数体内this的指向。

bind()也一样。

  1. function add(x, y) {
  2. return x + y;
  3. }
  4. function test(x, y) {
  5. return add.call(this, x, y)
  6. }
  7. console.log(test(10, 20))

call函数

call函数在调用一个函数的时候,会把该函数的执行对象上下文改为另一个对象

  1. function.call(thisArg,arg1,arg2,...)

如:

  1. function add(a, b) {
  2. return a + b;
  3. }
  4. function test(x, y) {
  5. return add.call(this, x, y);
  6. }
  7. console.log(test(90, 10)); // 100

apply函数

和call一样只是在传参数形式有所差异

  1. function.apply(thisArg,[argsArr])

正如:

  1. function add(a, b) {
  2. return a + b;
  3. }
  4. function test(x, y) {
  5. return add.call(this, x, y);
  6. }
  7. function add1(x,y){
  8. return add.apply(this,[x,y])
  9. }
  10. console.log(test(90, 10)); // 100
  11. console.log(add1(9, 10)); // 19

bind函数

bind函数是创建一个新函数,在调用的时候设置this作为提供的值

  1. function add(a, b) {
  2. return a + b;
  3. }
  4. function test(x, y) {
  5. const aa = add.bind(this, x, y);
  6. return aa();
  7. // return add.call(this, x, y);
  8. }
  9. function add1(x, y) {
  10. return add.apply(this, [x, y])
  11. }
  12. console.log(test(90, 10)); // 100
  13. console.log(add1(9, 10)); // 100

call()和apply()在执行后会立即执行前面的函数,而bind()函数不会立即调用,bind 会返回一个新的函数,可以在任何时候调用。

数组最大值和最小值

  1. Math.max.apply(null,arr);
  2. Math.min.apply(null,arr);

类数组转为数组

  1. Arrar.prototype.slice.call(arguments)