Александр, спасибо. Но находил информацию только о том, что in возвращает true, если ключ существует в интерфейсе. А вот об итерациях и присваиваниях инфы не видел.
WbICHA, какое моё утверждение не имеет смысла? Я нашёл уже что вызывает итерацию - квадратные скобки вокруг имени свойства в интерфейсе. (То есть изучил синтаксис)
WbICHA, в JavaScript итерируют например циклы for, while, методы map, forEach и т. д.
А в TypeScript итерируют интерфейсы что ли? Или что? Какой синтаксис то? Или он там абстрактно понимает, читая мысли разработчика, что именно тут нужно проитерировать?
WbICHA, понял, значит всё-таки скобки итерируют, спасибо. Я не ищу скрытый смысл, просто хочу понять как это работает, потому что TS написан на JS, а значит должна быть логика мне понятна. И поэтому я спрашиваю какой такой "всего лишь синтаксис" они сделали
Александр, В большей части разобрался, если интересно. Если я правильно понял, именно keyof проводит итерацию по ключам.
А вот есть ещё пример:
interface Car {
[key: string]: string
}
const newCar: Car {
name: 'BMW',
color: 'red'
}
Здесь итерация, видимо, происходит неявно. То есть в момент образования объекта newCar где-то "под капотом" скорее всего также появляется что-то типа оператора keyof, позволяя пробежаться по именам свойств.
Александр, хотя теперь я дошёл до того, что квадратные скобки видимо каким-то образом итерируют ключи, и если выражение возвращает true, то присваивается значение переменной P. Но до сих пор остаётся непонятным, каким образом скобки могут итерировать.
Ankhena, reset.css добавлял, поэтому всё обнулено да и в первую очередь искал лишние отступы через девтулзы))
В том и дело, что когда удаляю это свойство, скролл пропадает.
Ну да, как вариант, абсолютно позиционировать центральный блок. Спасибо, не сразу увидел ответ)
А в прошлом вопросе нет ответа с решением. Разве что был один комментарий, который подтолкнул меня к решению, но комментарии нельзя отмечать решением, насколько я понял.
Александр, а, инструменты разработчика. Ну да, я как раз через консоль и узнал, что в моём примере three() не было аналогично one()().
Я увидел, что при вызове three(), скобки прибавляются не к one(), а к возвращаемому значению функции one().
То есть при записи three(), сначала идёт запуск функции one(), возвращается two и затем уже к two прибавляются скобки, то есть three() равняется two(). Хотя пока что не особо ясно почему именно такой порядок. Но главное, что теперь виден факт доступа к переменной функции, после её завершения.
Василий Банников, спасибо, теперь более понятно, хотя всё равно странно. Проблема была в том, что я сначала думал, что если c1 = counter(), то значит c1() будет равняться counter()(). Но видимо c1 всё-таки сначала возвращает значение и только потом прибавляет скобки, а тогда получается не counter()(), а two(). Хотя я пока что без понятия почему именно такой порядок.
Но главное, что исходя из этого, теперь видно, что функция действительно завершила свою работу.
То есть возврат функции two, превращается в её вызов?
upd: А, ну по сути всё логично. Это просто вызов функции внутри функции. Тоже самое, что написать one()(), вместо three(). Когда мы пишем three, то фактически вызывается one(), а когда мы пишем three(), то идёт вызов one()(). И всё работает как обычно, функция two получает доступ к переменной из one, когда one ещё работает, а не завершила свою работу! Ну и нет никакого "замыкания"