在javascript中的apply或apply()和call()函数中使用'null'vs'this'

时间:2017-06-18 07:03:13

标签: javascript

thisnull方法使用thisArgapply()作为call()上下文有什么区别?

function getMax(arr) {
  return Math.max.apply(null, arr);
}

function getMax(arr) {
  return Math.max.apply(this, arr);
}

2 个答案:

答案 0 :(得分:1)

max静态函数,因此您传递的内容与this无关,因为未使用this。所以你的功能是等价的。

答案 1 :(得分:0)

使用this的重要意义是在调用方法时设置当前上下文。例如:

function Human() {
    this.getMax = function getMax(arr) {
      console.log(this.constructor);
      return Math.max.apply(this, arr);
    }
}

var human = new Human();

human.getMax([1,2]);

这里,console语句将this.constructor作为Human。如果不是这样,你就会将上下文作为窗口。

对于第一种情况,当您传递null时,它不会传递上下文。这可以在这里工作,因为Math.max期望以逗号分隔格式a,b,c的参数,当你执行.apply时正在处理。