docker run -it --rm --name QnA \
-v /home/User/site1:/var/www/site1 \
-v /home/User/site2:/var/www/site2 \
-v /home/User/site3:/var/www/site3 \
nginx
docker commit QnA savedImage # сохранит образ
docker run --name QnA_v2 \
-v /home/User/site4:/var/www/site4 \
savedImage
# убедиться, что всё норм. Остановить старый, пользоваться новым.
function sa($a, $b = 3, $c = 5) {
echo $a;
echo $b;
echo $c;
}
sa("gaga", c: "boba"); // gaga3boba
см. Именованные аргументыfunction sa($a, $b, $c) {
$b ??= 3; // если NULL, то станет 3
$c ??= 5;
// echo ...
}
sa("gaga", null ,"boba");
см. Null coalescing class Test {
constructor() {
this.data = null;
}
method1() {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.open('GET', '/article/xmlhttprequest/example/load');
xhr.onload = () => {
if (xhr.status != 200) {
alert(`Ошибка ${xhr.status}: ${xhr.statusText}`);
reject(); // облом!
} else {
console.log(`Готово, получили ${xhr.response.length} байт`);
this.data = xhr.response.length
resolve(); // выполнили обещание!
}
};
xhr.send();
})
}
method2() {
console.log(this.data + " method2 ")
}
method3() {
console.log(this.data + " method3 ")
}
}
const t = new Test()
t.method1()
.then(() => t.method2())
.then(() => t.method3())
async function main() {
const t = new Test();
await t.method1();
t.method2();
t.method3();
}
main();
eval()
очень небезопасно и нежелательно:let mul = eval(`${firstNumber} ${operation} ${secondNumber}`);
let mul = (new Function('a', 'b', `return a ${operation} b`))(firstNumber, secondNumber);
jsErrBlocks[key].remove();
выведите в консоль каждый jsErrBlocks[key]
— увидите, там не только цифровые индексы с найденными элементами. for .. in
пробежится по всем перечисляемым свойствам, включая унаследованные. Там будут и item, key, values, entries, forEach, length
jsErrBlocks.forEach((item) => item.remove())
for .. of
, как уже посоветовали[...jsErrBlocks]
– в него попадут только найденные элементыfor (let i = 0; i < jsErrBlocks.length; i++)
getElementsByClassName()
возвращает «живую» коллекцию. Как только в DOM что-то меняется, коллекция обновляется.array[i].className = 'style';
заменяет все классы элемента на этот. Т.е. пропадает класс "card", по которому отбирали элементы. Обработанный элемент пропадает из коллекции. Коллекция сокращается, и следующее значение i
подхватит элемент через-один от задуманного.let array = [...document.getElementsByClassName('card')]; // теперь это просто массив
card
, то добавлять класс можно через classList.add()
, как уже посоветовали. загрузка страницы
текущий цвет = есть что в LS ? что-то из LS : цвет-по-умолчанию
нажали на кнопку
поменяли цвет
сохранили в LS
загрузка страницы
переменная_Состояние = значение-по-умолчанию (true или false)
есть что в LS ? переменная_Состояние значение из LS
сделать цвет по Состоянию
нажатие кнопки
обновить переменную_Состояния
сохранить в LS
сделать цвет по Состоянию
(function () {
const storageKey = 'theme';
const state = {}
const stored = localStorage.getItem(storageKey);
state.theme = stored ? JSON.parse(stored) : false; // default
const el = document.querySelector('#pink');
const render = () => el.classList[state.theme ? 'add' : 'remove']('blueTheme');
render();
const toggleTheme = () => {
state.theme = ! state.theme;
localStorage.setItem(storageKey, JSON.stringify(state.theme));
render();
}
el.addEventListener('click', toggleTheme);
}())
super.method()
function
, пусть и после .bind()