我参加了一次工作面试,他们要求我在白板上用 JavaScript 编写一个函数来查找数组中的最大值。 我写道:
function max(a) { return Math.max.apply(Math,a) }
他们说得好,但是如果您不想写出函数而只想将最大值指向 Math.max 该怎么办?我说我认为你做不到。我想他们说你可以这样做:
var max = Math.max.apply.bind(Math)
但是当我这样做时,我调用 max([1,2]) 会得到一个错误:
Uncaught TypeError: Function.prototype.apply was called on #<Object>, which is a object and not a function
你应该怎么做?
最佳答案
我想你想要
var max = Function.prototype.apply.bind(Math.max, Math);
也就是说,您创建一个函数,它将在 Math.max
上调用 Function.prototype.apply
(就像您的 Math.max.apply
>) 以 Math
作为第一个参数,并将新函数的参数(它应该是一个数组)重定向为 Function.prototype.apply
的附加参数。
然后,Function.prototype.apply
将在 Math
上调用 Math.max
,将其数组参数传播为 Math 的参数。最大
。
但是当然,使用 ES6 扩展运算符会更好:
Math.max(...iterable);
关于javascript - 将 javascript Max 函数包装器转换为指向 Math.Max 的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37472413/