Re: различия между apply()
и распространением (при прохождении null
или таких, как thisArg
к apply()
, как в примере):
myFunction.apply(null, args);
myFunction(...args);
Помимо распространения будучи довольно новый, так что не так широко поддерживаются в настоящее время, apply()
принимает массив или подобный массиву объект аргументов, тогда как спред будет работать над любым итерабельным. Например, вы могли бы распространять Set
или Map
в качестве аргументов, в то время как вы не могли передать его в качестве аргумента argArray
в apply()
(хотя вы могли, конечно, разложить его как аргументы call()
: myFunction.call(whatever, ...someIterable)
).
Поскольку довольно легко преобразовать массив в массив, есть ли другие отличия?
Это не так-то просто для arguments
. Выполнение этого неправильного (или, возможно, вообще) может привести к тому, что механизм JS будет деоптимизировать функцию, и если есть правильный способ сделать это, что позволяет избежать этого, для этого требуется раздражающий шаблон.
описание товара opps есть. typo ... – stevemao
несомненно [быстрый google] (https://www.google.ca/search?q=javascript+%22...args%22+vs+arguments&oq=javascript+%22...args%22+ vs + arguments) работал бы здесь? Нажмите первый хит, найдите «...», информацию о предстоящем? –
@Mike 'args' - это произвольное имя, поэтому вы можете просто искать * аргументы javascript *, если вы ожидаете, что страница под названием * Аргумент объекта * будет использоваться для определения параметров отдыха. Конечно, если вы знаете, что они называются параметрами отдыха, было бы лучше искать. – JMM