.apply(thisArg, argsArray)
принимает два аргумента, которые вы можете увидеть описанные here. Первый аргумент (который, как вам уже известно, звучит так) - это значение this
для вызова функции. Второй аргумент - это массивный объект, содержащий все аргументы, которые будут переданы функции. Этот второй аргумент заключается в том, почему он используется здесь, так что он может вызывать функцию с точно такими же аргументами, которые были переданы первой функции app.listen()
.
Это распространенное использование для «пересылки» всех аргументов из одной функции в другую, не зная, что на самом деле есть аргументы. Поскольку объект arguments
представляет собой структуру данных, подобную массиву, он соответствует второму аргументу .apply()
, который ожидает массивный объект, являющийся списком аргументов.
server.listen(arguments);
не будет работать, потому что назвал бы .listen()
, но будет проездом один аргумент функции, который был массив подобного списка аргументов. Это не подпись функции server.listen()
. Он нуждается в каждом аргументе, переданном отдельно, а не в списке. .apply()
служит для его фиксации. Он принимает массив аргументов и передает их как отдельные аргументы вызываемой функции.
server.listen(...)
дополнительно осложняется тем, что он имеет четыре различных возможных набора аргументов, которые могут быть переданы ему. Использование .apply()
позволяет коду пересылки быть полностью независимым от того, какие аргументы были фактически переданы, поскольку он просто направляет именно то, что было фактически передано, не имея ничего о нем знать.
Посмотрите на второй параметр 'apply', а не на первый. –
Это было бы эквивалентно, если использовать '' .call' вместо '.apply'] (http://stackoverflow.com/q/1986896/1048572) ... – Bergi