一尘不染

Math.max.apply()如何工作?

javascript

Math.max.apply()工作如何?

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <script>
      var list = ["12","23","100","34","56",
                                    "9","233"];
      console.log(Math.max.apply(Math,list));    
  </script>
</body>
</html>

上面的代码在列表中找到最大数。谁能告诉我下面的代码如何工作?如果我通过的话似乎可行null or Math.

console.log(Math.max.apply(Math,list));

是否所有user-defined/Native functions我们都可以使用的调用和应用方法?


阅读 594

收藏
2020-05-01

共1个答案

一尘不染

apply接受一个数组,并将该数组作为参数应用于实际函数。所以,

Math.max.apply(Math, list);

可以理解为

Math.max("12", "23", "100", "34", "56", "9", "233");

因此,这apply是一种将数据数组作为参数传递给函数的便捷方法。记得

console.log(Math.max(list));   # NaN

将不起作用,因为max不接受数组作为输入。

使用的另一个好处是apply,您可以选择自己的上下文。您传递给apply任何函数的第一个参数将是该this函数的内部。但是,max不依赖于当前上下文。因此,任何事物都可以代替Math

console.log(Math.max.apply(undefined, list));   # 233
console.log(Math.max.apply(null, list));        # 233
console.log(Math.max.apply(Math, list));        # 233

由于apply实际上是在中定义的Function.prototype,因此apply默认情况下,任何有效的JavaScript函数对象都将具有函数。

2020-05-01