【发布时间】:2014-07-02 21:49:16
【问题描述】:
有morethanonestackoverflow 问题关于如何在 javascript 中找到一组值的最小值或最大值。这不是那个问题。
我想知道为什么将 .apply() 奇怪的东西作为 this 参数传递仍然有效。尽管来自 Aaron Crane 的 a good blog post 讲述了 Math 对象的 API 是如何变成现在这样的,但仍有一些问题没有得到解答。
以下每个代码 sn-ps 都有效。我的问题是,怎么做?分配给this 的具体情况如何使这些工作都发挥作用?
标准结构
var values = [45, 46, 47]
var min = Math.min.apply(Math, values);
alert(min); //45
一个奇怪的结构,但范围可能很棘手......
var values = [45, 46, 47]
var min = Math.min.apply(this, values);
alert(min); //45
有点奇怪
var values = [45, 46, 47]
var min = Math.min.apply(global, values);
alert(min); //45
仍然很奇怪,但也许还可以 b/c 浏览器
var values = [45, 46, 47]
var min = Math.min.apply(window, values);
alert(min); //45
很奇怪
var values = [45, 46, 47]
var min = Math.min.apply(null, values);
alert(min); //45
真的很奇怪
var values = [45, 46, 47]
var min = Math.min.apply(undefined, values);
alert(min); //45
【问题讨论】:
-
Math.min不会以任何方式使用this,所以实际上你通过它并不重要,它并不在乎。 -
作为
thisArg传递的值仅对function重要,前提是它依赖于具有特定值的this。还有,Math.min()doesn't need to referencethisat all。 -
apply的第一个参数是函数中应该用作this的值。由于Math.min不会使用this做任何事情,逻辑上你通过参数传递的this一点都不重要……你不妨传递"foobar"或@ 987654348@ 作为apply的第一个参数。
标签: javascript this