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()
при её вызове?
В первом случае Вы вызываете 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")
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
скачал сборку с гитхаба и хотел бы проверить ее у себя, но проблема не устанавливается - собака
Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»