Вывод аргументов псевдомассива arguments

107
31 января 2020, 10:40

 function foo(ags){ 
   document.write(this.a+"<br>") 
   document.write(ags) 
 }; 
 
 obj={ 
   a:2 
 }; 
 
 var bar = function(){ 
   return foo.apply(obj, arguments) 
 }; 
 
 bar("Hello")

Вопрос по псеводмассиву arguments, в первом варианте всё работает, тоесть, я передают в bar() при вызове нужный аргумент, ну и он чудесным образом подставляется в функцию foo() при вызове! Вопрос в следующем!

function foo(ags){ 
  document.write(ags) 
}; 
 
var bar = function(){ 
  return foo(arguments) 
}; 
 
bar("Hello")

Данный код (который второй) выводи [object Arguments]почему? Что изменилось то? (ну кроме того, что функция фу больше не вызвается с .apply(obj)) Причём, интересно то, что если вместо return foo(arguments) ввести return foo(arguments[0]) то всё работает, и в окно документа выводится "Hello"!Просьба объяснить на доступном языке!

И кстати, просто для более детального понимания, я же правильно рассуждаю, что В return foo.apply(obj, arguments) эта самая arguments является тем самым псеводмассивом arguments, в который записываются аргументы функции bar() при её вызове?

Answer 1

В первом случае Вы вызываете apply и массив arguments "раскладывается" по аргументам функции foo

Во втором случае Вы передаете в функцию массив аргументов и он интерпретируется как массив.

Вот так во втором случае Вы бы получили ожидаемый результат:

function foo(ags){ 
  document.write(ags) 
}; 
 
var bar = function(){ 
  return foo(...arguments) 
}; 
 
bar("Hello")

Или аналогичный второму вывод, но для первого примера: call передает массив arguments как первый аргумент вызова функции foo

function foo(ags){ 
  document.write(ags) 
}; 
 
var bar = function(){ 
  return foo.call(0, arguments) 
}; 
 
bar("Hello")

READ ALSO
React native как запустить чужой проект?

React native как запустить чужой проект?

скачал сборку с гитхаба и хотел бы проверить ее у себя, но проблема не устанавливается - собака

130
Не монтируются роуты в React приложении

Не монтируются роуты в React приложении

По какой-то причине роут не добавляется в приложение

128
Реализовать функцию addDigits() [закрыт]

Реализовать функцию addDigits() [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»

109