Изучаю javascript. Есть код
function delay(f, time){
//alert(arguments);
for(vs of arguments){
alert(vs);
}
return function(){
setTimeout(() => {
f.apply(this, arguments);
}, time);
}
}
function f(x) {
alert( x );
}
var f1000 = delay(f, 1000);
var f1500 = delay(f, 1500);
f1000("тест"); // выведет "тест" через 1000 миллисекунд
f1500("тест2"); // выведет "тест2" через 1500 миллисекунд
Не могу понять как аргументы функции f (в данном случае аргумент x, который принимает значения "тест" и "тест2") передаются в функцию delay и функция delay получает к ним доступ... Ведь arguments в функции delay содержат именно аргументы функции delay! А мы как по волшебству в функции delay получаем доступ к аргументам другой функции (в данном случае - к аргументам другой функции f).
Сделал перебор массива arguments, там как и ожидалось в первом элементе
function f(x) {
alert( x );
}
во втором задержка 1000 или 1500
Как нам удается пробросить параметр x функции f в f.apply(this, arguments) не пониаю...
Тут главное - не использовать слово "пробросить".
Коллекции arguments
в функции delay
и в возвращаемой анонимной функции - это совершенно разные коллекции.
...
return function(){
setTimeout(() => {
f.apply(this, arguments);
}, time);
}
}
Экземпляры этой возвращаемой анонимной функции присваиваются переменным f1000
и f1500
.
Для f1000
- значение time
равно 1000
.
Для f1500
- значение time
равно 1500
.
f
в обоих случаях - внешняя функция f
- первый параметр в вызовах delay
.
У стрелочной функции, которая является первым параметром setTimeout
, своих arguments
нет, она использует arguments
той функции, внутри которой она определена, то есть f1000
или f1500
.
А аргументы этих f1000
и f1500
- "тест"
и "тест2"
соответственно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я пишу метод save обьекта user который должен иметь в себе ивенты success и error (это ивенты?)
создаю глобальную переменную dev и локальную, внутри функции, почему ругается на "не определение" глобальной переменной? ведь если создам глобальную...