setInterval()
первым аргументом надо передать функцию (он сам вызовет её потом),"строку"
или число 42
.(param) => () => {
console.log("Выхлоп!" + param);
}
Две стрелочки, значит, тут две функции. Одна вокруг второй. Первая, та, что снаружи, принимает аргументом param
, и возвращает вторую функцию () => { console.log("Выхлоп!" + param); }
Причём вернувшаяся функция «запомнила» значение param
внешней обёртки и будет его использовать. Это обёртывание называется «Замыкание» или "closure".function(){ return function() {}; }
((param) => () => console.log(param))(6)
– этот вызов внешней с аргументом 6
даст результатом внутреннюю функцию, которая запомнила значение param
. И мы имеем на руках внутреннюю функцию.((param) => () => console.log(param))(6)()
setInterval()
первым аргументом надо передать не конечный результат, а функцию — её вызовут через некоторое время, не сразу. Тут передают внутреннюю функцию. Поэтому скобки всего одни: с одними скобками получаем внутреннюю функцию.delay()
создаёт обёртку над функцией, чтобы выполнить её через какое-то время. При этом старается ничего не сломать – передать все аргументы и сохранить контекст (this
) вызова. На всякий случай.f.apply(context, ...)
(документация) – вызовет копию функции f()
с привязанным к ней контекстом context
. Тут так сделали, чтобы наверняка передать контекст. Тот this
, что был при вызове delay()
, благополучно окажется и у вызываемой через паузу функции.delay()
– и вспоминайте про this
у функций. function delay(f, ms = 500) {
return function d() {
setTimeout(() => f.apply(this, arguments), ms);
};
}
// функция для испытаний, будет выводить this
function testThis(msg) {console.log(msg, this);}
// Test 1
delay(testThis)("Test1"); // Window
// Test 2
const obj = {
title: 'test 2',
method: delay(testThis),
};
obj.method("Test 2"); // obj {title: 'test 2', method: d()}
// Test 3
const test3 = delay(testThis).bind({title: 'test 3'});
test3("Test 3"); // Object {title: 'test 3'}
// Test 4
const maker = delay(testThis);
const M = new maker('Test 4'); // Object { }
const colors = {
'3': 'red',
'2': 'green',
'1': 'blue',
'0': 'black',
};
const setColor= input => {
const { value } = input;
if (colors.hasOwnProperty(value)) {
input.style.backgroundColor = colors[value];
}
}
const onInput = e => {
setColor(e.target);
}
document.querySelectorAll('input')
.forEach(elem => {
elem.addEventListener('input', onInput);
setColor(elem);
});
img-300x160.jpg
(ну, загрузили скачанную с такого же сайта и залили к вам). И потом кто-то загружает картинку img.jpg
для которой сгенерится версия 300x160.push()
возвращает новую длину массива, тут ничего не поделаешь..apply()
там зачем. Это учебное задание?newParentPath
и последнего элемента, который был в предыдущем массиве mappedPath
.mappedPath = [ ...this.newParentPath.split(', '), mappedPath.pop() ];