Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
 Аватар для Sonicos
2 / 2 / 3
Регистрация: 07.11.2014
Сообщений: 98

Нужен ли let?

06.05.2020, 13:29. Показов 3000. Ответов 28

Студворк — интернет-сервис помощи студентам
Приветствую, друзья.
Тупой вопрос от новичка по циклу.
Есть ли разница в этих написаниях:
JavaScript
1
for (i = 0; i < a; i++) {}
и
JavaScript
1
for (let i = 0; i < a; i++) {}
Насколько важно писать let в данном случае?
Спрашиваю, потому что вот это работает без let:
JavaScript
1
2
3
4
5
6
7
8
let div12 = document.querySelectorAll('.div-12');
function t12() {
    for (i = 0; i < div12.length; i++) {
        div12[i].style.background = 'orange';
    }
}
 
document.querySelector('.b-12').onclick = t12;
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2020, 13:29
Ответы с готовыми решениями:

Как конкретно установить SSD, какой нужен (и нужен-ли) шлейф дополнительный?
нутбук: HP Pavilion dv7 (извиняюсь - забыл про полное название. но AMD 4 ядра, 6Gb озу. видео Dual Graphics. имхо: не важно это щас.) сам...

Компилятор жалуется, что нужен Boolean,, и наоборот, нужен integer
program rascheturona; var armor, armorbypass, gotdam: Real; stddam :Integer; x : Boolean; begin; ; ...

СМА Gorenje WA61101/02, Нужен номинал резистора, Нужен номинал резистора
Привезли стиралку, нет нагрева. При осмотре обнаружен сгоревший резистор. Клиент дома переносил машинку на другое место. ...

28
 Аватар для Sonicos
2 / 2 / 3
Регистрация: 07.11.2014
Сообщений: 98
06.05.2020, 19:42  [ТС]
Студворк — интернет-сервис помощи студентам
Перекладывая приобретённое знание на этот пример, ход моих мыслей:
в консоль направлена переменная х (первый КонсольЛог), которая на момент чтения не объявлена. Проверяем, объявлена ли она в функции? Нет. Проверяем, объявлена ли она выше? Да. Она равна 10. Но в консоли undefined.
Что я не учёл?
По второму консольлогу ясно. Она объявлена и переписана.
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,099
06.05.2020, 19:53
Sonicos, а вот тут уже вступает в ход автоматическая оптимизация кода интерпретатором
на самом деле браузер переделывает этот код вот в такой:
JavaScript
1
2
3
4
5
6
7
8
var x = 10;
function foo() {
    var x;
    console.log(x);
    x = 20;
    console.log(x);
}
foo();
Он видит что "x" объявляется в функции ниже, и "вытягивает" это объявление наверх функции. Поэтому к моменту первого console.log получается что переменная объявлена, но ее содержимое не определено. Вся эта оптимизация справедлива и для глобальной области видимости. Кстати благодаря ей функции которые описаны с помощью Function Declaration можно вызывать в коде до того как они были описаны. Интерпретатор при запуске скрипта сам вытягивает их наверх.
2
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
06.05.2020, 19:56
На сколько я понимаю это дело, переменная i объявлена со значением undefined. Она является глобальной в области видимости, в данном случае в текущем файле js. Не объявленная i, скорее всего равна var i. Такие переменные поднимаются вверх (хостятся) не зависимо от того где находятся.
0
 Аватар для Sonicos
2 / 2 / 3
Регистрация: 07.11.2014
Сообщений: 98
06.05.2020, 20:31  [ТС]
Цитата Сообщение от AlexZaw Посмотреть сообщение
Sonicos, а вот тут уже вступает в ход автоматическая оптимизация кода интерпретатором
на самом деле браузер переделывает этот код вот в такой:
JavaScript
1
2
3
4
5
6
7
8
var x = 10;
function foo() {
    var x;
    console.log(x);
    x = 20;
    console.log(x);
}
foo();
Он видит что "x" объявляется в функции ниже, и "вытягивает" это объявление наверх функции. Поэтому к моменту первого console.log получается что переменная объявлена, но ее содержимое не определено. Вся эта оптимизация справедлива и для глобальной области видимости. Кстати благодаря ей функции которые описаны с помощью Function Declaration можно вызывать в коде до того как они были описаны. Интерпретатор при запуске скрипта сам вытягивает их наверх.
Спасибо. Теперь я знаю больше
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.05.2020, 14:02
Насколько я слышал (и даже как-то проверял) переменные, объявленные без var, let становятся глобальными. То есть свойствами объекта window
И если сделать так
JavaScript
1
2
3
4
5
6
7
8
9
10
function F() {
  i = 10;
  var i = 20; // let i = 20; 
  console.log(i);  // 20
  console.log(window.i);  // 10
}
function G() {
   console.log(i);  // 10, если до этого функция F отработала
                        // undefined в противном случае.
}
Это мне так кажется. Сам я еще в этих делах зело зелен, и вполне могу ошибиться.
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
12.05.2020, 14:28
Байт, насколько я знаю, переменная, объявленная через var, "поднимается" к началу того блока кода, внутри которого она объявлена (в данном случае блок — это функция F). Это означает, что в строчке 2 переменная i уже существует. Получается, что инициализация в данном случае предшествует объявлению. Если объявить i через let, то получим ошибку. А если совсем не будем объявлять, то да, она станет глобальной; но только в нестрогом режиме!
1
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2381 / 1741 / 677
Регистрация: 07.08.2016
Сообщений: 4,099
12.05.2020, 15:03
Байт, Ваш код при оптимизации превратится в такой:
JavaScript
1
2
3
4
5
6
7
8
9
10
function F() {
  var i;
  i = 10;
  i = 20;
  console.log(i);  // 20
  console.log(window.i);  // undefined
}
function G() {
   console.log(i); //i is not defined
}
если вместо var использовать let, то будет ругаться на невозможность доступа к переменной до инициализации
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
12.05.2020, 18:59
DrType, AlexZaw, Да, я забыл про "поднятие" var.

Не по теме:

Трудно старому сишнику разбираться в JS-механизмах!



Добавлено через 1 минуту
Хочется какой-то логики, а она вильнет хвостиком - и нету...
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
13.05.2020, 01:28
Цитата Сообщение от Байт Посмотреть сообщение
Хочется какой-то логики
вам хочется логик -- их есть у меня

Запустите в браузере следующий код:
JavaScript
1
2
3
4
5
6
7
var qwerty = 123;
//delete qwerty;
try {alert ('qwerty == ' + qwerty);} catch (err) {alert (err)}
try {alert ('window.qwerty == ' + window.qwerty);} catch (err) {alert (err)}
try {alert ('window["qwerty"] == ' + window["qwerty"]);} catch (err) {alert (err)}
try {alert ('self.qwerty == ' + self.qwerty);} catch (err) {alert (err)}
try {alert ('self["qwerty"] == ' + self["qwerty"]);} catch (err) {alert (err)}
и посмотрите на результат

затем в первой строке замените var на let и снова полюбуйтесь модальными окнами на странице

наконец, удалите let и ещё раз запустите в браузере


для полного удовлетворения повторите все три процедуры, раскомментировав вторую строку

ну и для "окончательного оргазма" попробуйте в конце кода добавить var qwerty = 456; alert (qwerty);
предупреждаю, что при наличии let в первой строке страница с этим добавлением не пройдёт тест на соответствие синтаксису, в консоли прочитаете причину
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2020, 01:28

СМА Indesit WIN602(EU), нужен дамп прошивки или конфиг, не включается, нужен дамп прошивки или конфиг
После ремонта блока питания и замене ШИМ, СМА не включается поделитесь пожалуйста дампом прошивки или конфиг СМА Indesit WIN602(EU)...

СМА Whirlpool AWM245 нужен номинал R6, Whirlpool AWM245 нужен номинал R6
Задымился , расплавился и замкнул УБЛ. На модуле выгорел резистор R6 и дорожка к нему, наверняка накрылась и TDA1085C. Подскажите...

Нужен ли он?
Размышляю, нужно ли регистрировать сайт в я.каталоге. Собрал статистику - из нашей рубрики на сайт будет идти 1-2 человека в день. Т.е....

Нужен пк
Нужен пк с али и днс за 20 к +- 2000 Пока надумал вот что: 1. Matrexx 55 - 3650 rub 2. Cougar ste -2550 rub 3. Gammax 200т - 999...

Нужен ли C++
_сабж_


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru