javascript - Math.max.apply() 是如何工作的?

标签 javascript function apply

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>

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max

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

似乎它有效
console.log(Math.max.apply(Math,list));

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

最佳答案

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 is actually defined in Function.prototype ,任何有效的 JavaScript 函数对象,默认情况下都将具有 apply 函数。

关于javascript - Math.max.apply() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255138/

相关文章:

javascript - 选择标签中的 Mixitup 过滤器在 google chrome 和 IE 中不起作用

'apply' 函数中的行/列计数器

python - pandas 在列的子集上应用自定义函数

Python:逐行替换数据帧值

javascript - 延迟 HTML5 通知?

javascript - 使用 Node JS 将数据从 Excel 导入 MySql

javascript - 如何进行多个 api 调用 Node.js Promise

php - 使用 mysql 数据库中的数据在 html 表中显示给定时间的事件并发进程数

programming-languages - 是否有任何编程语言的函数的变量参数不在末尾?

javascript 更改图像和 href