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")
Продвижение своими сайтами как стратегия роста и независимости