TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.
Но стоп, компиляция - это процесс перевода "человеческого" кода в машинный код.
In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language).
function createCounter() {
let counter =0;
counter = counter - 10
const myFunction = function () {
counter = counter+1;
return counter
}
return myFunction
}
let z = createCounter() // Вернули в переменную z функцию "myFunction" у которой в замыкании есть counter.
// counter внутри на данный момент равен -10.
// Вызвали функцию и вывели результат в консоль.
// Так как внутри функции counter берётся из замыкания, то при вызове функции получаем
// -10 + 1
console.log(z()) // -9
// В данном примере - бесполезный ничего не делающий вызов.
// То есть создаётся ещё один НОВЫЙ счётчик, со своим замыканием, но он никуда не сохраняется.
createCounter()
// Снова вызвали функцию и вывели результат в консоль.
// -9 + 1
console.log(z()) // -8
где я допускаю ошибку
Второй вопрос откуда берется counter при втором вызове console.log(z())
const uniqueWithSum = arr =>
arr.reduce((acc, n) => {
const keys = n.slice(0, -1);
const item = acc.find(m => m.length === n.length && keys.every((k, i) => k === m[i]));
(item ?? (acc[acc.length] = [ ...keys, 0 ]))[keys.length] += n[keys.length];
return acc;
}, []);
const uniqueWithSum = (function(arr) {
const indexTree = new Map;
return arr.reduce((acc, [...keys]) => {
const val = keys.pop();
const indexes = keys.reduce((p, c) => p.set(c, p.get(c) ?? new Map).get(c), indexTree);
const index = indexes.set(this, indexes.get(this) ?? ~-acc.push([ ...keys, 0 ])).get(this);
acc[index][keys.length] += val;
return acc;
}, []);
}).bind(Symbol());
const uniqueWithSum = arr =>
[...arr.reduce((acc, n) => {
const end = n.length - 1;
const key = n.reduce((p, c, i) => i === end ? p : p.set(c, p.get(c) ?? new Map).get(c), acc[0]);
acc[1].set(key, acc[1].get(key) ?? n.map((m, i) => i !== end && m)).get(key)[end] += n[end];
return acc;
}, [ new Map, new Map ])[1].values()];
useEffect(() => {
fetch('https://prava74.ru/questions/AB/tickets/'+istr+'.json')
.then((response) => response.json())
.then((json) => setData(json))
.catch((error) => console.error(error))
.finally(() => setLoading(false));
}, []);
type FunctionDinamicParams = <T extends keyof TMap>(eventName: T, params: TMap[T]) => Promise<void>;
const obj = {
a: 69,
b: 187,
c: 666,
};
const proxy = new Proxy(obj, {
set(target, key, val) {
console.log('свойство', key, 'изменило своё значение с', target[key], 'на', val);
target[key] = val;
return true;
},
});
getDataByINN(myPersonPars['INN']).then((suggestion) => {
const myCompany = suggestion
})
<Note
removeElement={() => handleDelete(index)}
/>
const [notes, setNotes] = useState([тут ваши Notes])
const handleDelete = (index) => {
let newNotes = [...notes];
newNotes[index].splice(index, 1);
setNotes(newNotes);
};
indexOf()
, который возвращает -1
если не найдено, или индекс от 0
и больше.-1
или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ }
но иногда хочется короче.~
хорош тем, что выделяет -1
: только -1
с этим оператором даст 0
. Прочие числа дадут какое-то ненулевое значение.~(-1) === 0
0
и больше получилось тоже ненулевое число, и !!
даст true
-1
получится уникальный 0
, и !!0
вернёт false
function truncateString(str, num) { // функция принимает два аргумента - саму строку и ограничение длины строки
if (str.length > num) { // если длина строки больше ограничения
return str.slice(0, num) + "..."; // обрезаем строку до ограничения, в конце добавляем многоточие (sic!) и возвращаем
} else { // в противном случае
return str; // возвращаем исходную строку
}
}