Вызовите функцию с массивом аргументов [дубликат]

23
задан Michał Perłakowski 24 January 2016 в 16:24
поделиться

1 ответ

С момента появления ES6 вы можете использовать синтаксис распространения в вызове функции:

 ] const args = [1,2,3]; fn (... аргументы); функция fn () {console.log (аргументы); } 

До ES6 вам нужно было использовать apply .

 var args = [1,2,3]; fn.apply (нуль, аргументы); функция fn () {console.log (аргументы); } 

Оба будут производить эквивалентный вызов функции:

fn(1,2,3);

Обратите внимание, что я использовал null в качестве первого аргумента примера apply , метод slice .

 function fn () {var args = Array.prototype.slice.call (аргументы); console.log (аргументы); } fn (1,2,3); 

Edit: В ответ на ваш комментарий, да, вы можете использовать метод shift и установить его возвращаемое значение в качестве контекста ( this ключевое слово) в вашей функции:

fn.apply(args.shift(), args);

Но помните, что shift удалит первый элемент из исходного массива, и ваша функция будет вызываться без этого первого аргумента.

Если вы по-прежнему необходимо вызывать вашу функцию со всеми остальными аргументами, вы можете:

fn.apply(args[0], args);

И если вы не хотите изменять контекст, вы можете извлечь первый аргумент внутри своей функции:

 function fn (firstArg, .. .args) {console.log (аргументы, firstArg); } fn (1, 2, 3, 4) 

В ES5 это было бы немного более подробным.

 функция fn () {var args = Array.prototype.slice.call (аргументы), firstArg = args.shift (); console.log (аргументы, firstArg); } fn (1, 2, 3, 4); 
34
ответ дан 29 November 2019 в 01:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: