JS вопрос. Вижу что с появлением ES6, появилось жесткое правило : либо const, либо let. И у меня такой вопрос. Вот есть цикл for и в заголовке мы по новым правилам пользуемся let i , ну и как обычно. В JS учебнике сказано, что на каждую итерацию создается своя новая переменная. Правильно ли я понимаю, что мы каждый раз выделяем новое место под туже переменную с новым значением и каждый раз её выкидываем (если это не замыкание)? И если это так, то разумно предположить, что это явно медленнее чем обычный var, который будет просто менять значение в конкретном участке памяти.
>>192110081так я бы и продолжил, но у меня вот буквально недавно товарищ устроился и ему сразу сказали: var забываем, есть только let и const.
>>192110048 (OP)Если бы она каждую операцию новая сохранялась, то как бы она инкрементировалась бы? Тогда любой цикл for стал бы бесконечным, не?Алсо старые браузеры соснут у скриптов со всякими хипстерскими let?
>>192110108>и ему сразу сказали: var забываем, есть только let и const.Чем обусловлено? Просто потому что МОДНО?
>>192110117>Если бы она каждую операцию новая сохранялась,Если бы она каждую операцию новая создаваласьslowfix
>>192110048 (OP)Все равно один раз объявится. Алсо, не помню, когда последний раз писал обычный цикл на js.
>>192110128> >и ему сразу сказали: var забываем, есть только let и const.> Чем обусловлено? Просто потому что МОДНО?А такая причина очень распространена. Вместо практической пользы любят пускать в ход всякую дичь, лишь бы стильно и не как у всех. На работе нахуй.
>>192110048 (OP)ты можешь безопасно создавать новые функции внутри цикла for:for(let i = 0; i < +Infinity; i++) { doSomething(() => { console.log(`Finished ${i}`); });}с var точно такой же код не прокатит, придётся создать новое замыкание:for(var i = 0; i < +Infinity; i++) { (it => { doSomething(() => { console.log(`Finished ${it}`); }); })(i);}
>>192110117>Алсо старые браузеры соснут у скриптов со всякими хипстерскими let?Почти 90% поддержкиhttps://caniuse.com/#search=let
>>192110206я сохранил твой ответ и вернусь к нему позже. Похоже у меня не хватает еще понимания или опыта.
>>192110428Недавно подвороты начал делать, но это из-за того что голодаю и штаны теперь спадаютСкорее всего буду самым цисгендерным в коллективе
Аноны, есть смысл учить js, если не хочу писать веб, а хочу удобный язык под разные сложные штуки, в частности хочу освоить ИИ и разные сложные штуки
>>192110048 (OP)зависит от JS движка и как он оптимизирует на самом деле. Движки умные так что вряд ли они будут создавать новую переменную для каждой итерации лул, так что не парься.
>>192110048 (OP)Смотри, цикл for состоит из трёх фаз:for ([инициализация]; [проверка]; [модификация])Не ебу, откуда ты взял создание переменной на каждую итерацию, если из самого названия "инициализация" понятно, что она проходит только один раз при старте цикла?
>>192110128let видна в пределах фигурных скобок, а за пределами них автоматически уходит в сборщик мусораconst - то же самое, но нельзя перезаписыватьvar видна во всём коде практически, в том числе до определения переменной да, это так
>>192110048 (OP)Ты, видимо, читаешь учебник на ангельском через переводчик. Первая часть цикла for выполняется один раз при входе в цкил. Другое дело, что с вложенными циклами с оговоркой и там действительно создается новая переменная, но для каждой итерации цикла, в которой он был вложен.
>>192110916>При объявлении переменной в цикле for(let …) – она видна только в этом цикле. Причём каждой итерации соответствует своя переменная let.Где там написано, что на каждую итерацию создается одна переменная?
>>192110048 (OP)Сделай бенчмарк, это просто. Никакой старый браузер не соснет от лет или конст, после транспайлера лет превратится в вар
>>192110977>>192111042Вот пример из книжки. Здесь в массив пушатся функции с i на текущий момент. Возвращается массив с функциями, каждая из которых ссылается на своё лексическое i, что равносильно тому, что каждая итерация создает свою i и не чистит её из-за замыкания. Разумно предположить, что обычный цикл также каждый раз инициализирует i и так же её уничтожает.
Блядь, я нихуя не могу понять, что значит "Возвращать". Что это? Дает результат? Или что? Почему именно так называется?
>>192110916Проебался, признаю. В любом случае, в болене-менее современном браузере нет разницы: https://stackoverflow.com/a/40449532Асло лиса
>>192111110В теле цикла ты получаешь возможность работать с переменной благодаря тому, что в каждой новой итерации создается независимая переменная, значение которой копируется в переменную цикла в конце каждой итерации. Кури экму, еба.http://www.ecma-international.org/ecma-262/7.0/index.html#sec-for-statement-runtime-semantics-labelledevaluation
>>192111360Просто выдает результат вычисления. В джс все операторы возвращают значение, даже запятая и присваивание. Функции тоже. Даже пустая вернет undefined.