7 * 2 = 14
дисплеев 1920 x 1080 каждый.const blockRelocate = () => {
const elSource = document.querySelector('.description-wrapper');
if (!elSource) {
return setTimeout(blockRelocate, 150);
}
const elTarget = document.querySelector('.item-calculator_container');
elTarget.insertAdjacentElement('beforebegin', elSource);
}
blockRelocate();
ffmpeg
– оно выполнилось и вывело версию и кучу всего. ffmpeg \
-ss 12 \
-i video.mp4 \
-t 22 \
audio_12_34.wav
Set
удобен, например, когда нужно оставить из набора данных только уникальные.const data = [ 1, 2, 2, 3, 3, 3 ];
const unique = [...new Set(data)];
unique // [ 1, 2, 3 ]
Map
хорош тем, что ключами в нём могут быть и объекты. Например, HTML-элементы, для которых захочется хранить какие-то данные. И Map запоминает порядок добавления элементов, что может быть полезно при переборе. let value = { name: 'iOne' };
let x = value; // ещё одна "ссылка" на объект
value = null; // или delete value; – то же самое
x // { name: "iOne" }
Разберитесь с основами: Объекты и ссылки на объекты. Т.к. в объекте weakMap есть ссылка от ключа на объект-значение — объект вполне себе сохраняется. Главное, что всё ещё жива ссылка на объект-ключ key
.const weakMap = new WeakMap();
let value = {name: 'Ivan'};
let key = {};
// добавление нового элемента
weakMap.set(key, value);
// обнуление
delete key;
Теперь, хоть объект, на который указывала переменная key
всё ещё используется в качестве ключа в WeakMap, сборщик мусора, при срабатывании, таки удалит его. ffmpeg \
-ss 15 \ # пропустить 15 секунд от начала
-i Source.mp4 \ # имя исходного файла
-t 30 \ # продолжительность 30 сек.
-c copy \ # кодек "копия" - не перекодировать
Result.mp4 # что получится - в этот файл
только удалите все комментарии – после слешей должен сразу быть перенос строки. Этот вариант, пожалуй, самый быстрый из возможных. Вопрос если разница в таких записях?
resolve(script)
передаст дальше по цепочке этот script
(который никому не нужен, похоже).script.onload = resolve
передаст по цепочке объект события (тоже всем по барабану)почему такой ее вызов дает ошибку script.onload = resolve(script);
потому, что нужна функция, которую вызовут позже, а не мгновенный результат её выполнения. const currentYear = new Date().getFullYear();
const years = [];
for (let year = currentYear - 5; year <= currentYear + 5; year++) {
years.push(year);
}
years // [2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027]
for (let i = 0; i < 5; i++) {
let newYear = year; // <--- тут ошибка
firstYears.push((newYear -= 1));
}
obj
— чего ожидаете от weakMap(null)
?weakMap
какие-то припрятанные данные. Нет объекта — нет данных. function UpdateName() { // ... }
то можно так:this[v].call(null);
let
или const
, то хорошего варианта нет. eval()
, но это крайне нежелательно:eval(`${v}.call(null)`);
— т.е. составляется текстовая строка JS-кода, которая исполняется.const methods = {
UpdateName: () => { /* ... */ },
UpdateAddress: () => { /* ... */ },
};
methods[v].call(null);
thisArg
для функции.pop()
будет вызываться в контексте начального массива nums
— последовательно выдирая из него последний из оставшихся элементов: 3, 2, 1nums
, соответственно, на каждой итерации будет становиться на 1 элемент короче.[...nums]
нужна только ради его первоначальной длины, чтобы вызвать дальнейшую магию правильное число раз.