在JavaScript的apply或apply()和call()函数中,使用'null'与使用'this'的区别。

4
在使用apply()call()方法时,使用thisnull作为thisArg上下文有什么区别?
function getMax(arr) {
  return Math.max.apply(null, arr);
}

function getMax(arr) {
  return Math.max.apply(this, arr);
}
2个回答

2

max是一个静态函数,所以你传递什么作为this并不重要,因为this并未被使用。因此,你的函数是等价的。


谢谢,但是假设不是静态函数而是其他函数,那么传递这个或null的用途是什么,它们之间的区别是什么,如果能解释一下将会非常有帮助。请原谅我的幼稚。 - Enthu

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]);

在这里,控制台语句将输出 this.constructor 作为 Human。如果情况不同,你会得到 window 作为上下文。

对于第一种情况,当你传递 null 时,它不会传递上下文。这在这里起作用,因为 Math.max 期望以逗号分隔的格式 a、b、c 传递参数,这在使用 .apply 时已经处理好了。


感谢gauravmuk,我还有一个问题,当null不提供任何上下文时,它可以用于什么目的,因为apply的主要目的是提供上下文。 - Enthu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接