Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我们必须通过';这';至';应用';_Javascript - Fatal编程技术网

Javascript 为什么我们必须通过';这';至';应用';

Javascript 为什么我们必须通过';这';至';应用';,javascript,Javascript,在 为什么我们必须将Math作为this对象传入?我很难理解这一点 在执行过程中,应用是否需要此(数学)的具体内容?这取决于max的内部实现细节。如果它使用了这个,并且期望这个是数学,那么它是必需的。如果它没有以任何方式使用this,那么您传递的thisArg与此无关 max可能会使用Math的一些辅助方法来实现其内部实现。除非你明确知道它不存在,否则你应该保留它的上下文。(一般来说,无论何时使用apply或call或传递方法。)使用apply()方法(Function.prototype.ap

为什么我们必须将
Math
作为
this
对象传入?我很难理解这一点


在执行过程中,
应用
是否需要
数学
)的具体内容?

这取决于
max
的内部实现细节。如果它使用了
这个
,并且期望
这个
数学
,那么它是必需的。如果它没有以任何方式使用
this
,那么您传递的
thisArg
与此无关

max
可能会使用
Math
的一些辅助方法来实现其内部实现。除非你明确知道它不存在,否则你应该保留它的上下文。(一般来说,无论何时使用
apply
call
或传递方法。)

使用
apply()
方法(
Function.prototype.apply()
)都可以将参数作为数组传递给函数以及通过它传递给上下文

var values = [1,2,3,4,5];
var max = Math.max.apply(Math, values);
在本例中,
max
不需要或不使用当前上下文,因此您可以放置任何内容,它将工作,包括null


看这个问题:

不,你不必通过它
Math.max.apply(null,values)
可以很好地工作。由于该方法在内部不使用
this
,实际上您可以在那里传递任何内容。在这种情况下,您不需要这样做,因为
Math.max
确实需要
this
,所以即使
null
也可以工作。有趣,因为在Nicholas Zakas关于Javascript的书中,他写道我们需要传递它:“这项技术的关键是将Math对象作为apply()的第一个参数传递,以便正确设置该值。然后可以将数组作为第二个参数传递。”可能这是过时的信息,因为这本书是从2012年开始的。@Sandi:它保证调用完全等同于
Math.max(1,2,3,4,5)
(因为该调用的对象是
Math
,就像任何其他
x.y()
调用一样),但我无法想象有任何实现选择在
var max=Math.max;最大值(1,2,3,4,5)
。应该禁止违反标准(我就是这么读的——没有特别的说明,但没有提到
这个
值,而且“它没有说在遵循标准步骤时不要违反”听起来不太符合标准)。好吧,如果我需要这样做,为什么这里的
Math
是适当的上下文,而不是例如
global
?如果您通过
Math.max()
定期调用它,那么上下文就是
Math
,这取决于您调用它的方式。因此,如果
max
期望任何内容作为其上下文,那么它将是
Math
;这段对话已经结束。
func.appy(this, [argumentarray])