Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Свойством какого объекта являются let переменные? (https://javascript.ru/forum/misc/79280-svojjstvom-kakogo-obekta-yavlyayutsya-let-peremennye.html)

jsdump 19.01.2020 09:46

Свойством какого объекта являются let переменные?
 
var создает переменные как свойство объекта window. А свойством какого объекта являются переменные созданные при помощи let?

Malleys 19.01.2020 10:29

Цитата:

Сообщение от jsdump
А свойством какого объекта являются переменные, созданные при помощи letconst]?

Никакого объекта, где были бы доступны такие переменные, не существует. Эти переменные доступны только в вашем скрипте (учитывая блочную видимость). Если вам нужен объект, то вы можете его создать сами!

jsdump 19.01.2020 17:48

А почему разработчики так сделали? Почему не создали объект?

Aetae 19.01.2020 18:57

Скорее вопрос "почему var объявленные глобально попадают в window". По логике языка - не должны. Чистое легаси. Переменные это переменные, свойства объекта - это свойства объекта.

jsdump 19.01.2020 23:43

Вот есть код:
for (let i=0; i < button.length; i++)
  button[i].onclick = function () {
     alert(this);
   }

Он ставит функцию обработчик на событие и значение переменной i в придачу.
На каждой итерации цикла новое значение i запасает в свой button элемент. А почему var вместо let так не может? Почему бы ему запасти для кажого button свой window.i ?

Aetae 20.01.2020 00:02

Потому что let действует в рамках блока
{

}
, а var в рамках функции
function() {

}
.
Когда ты пишешь
for (let i=0; i < button.length; i++)
  button[i].onclick = function () {
     alert(i);
   }
это можно считать шорткатом для
for (let i=0; i < button.length; i++) {
  button[i].onclick = function () {
     alert(i);
   }
}
соответственно в рамках блока let i каждый раз своя, и при вызове созданной функции берётся i из этого блока.

А когда ты пишешь так:
for (var i=0; i < button.length; i++) {
  button[i].onclick = function () {
     alert(i);
   }
}
это шорткат для
var i;
for (i=0; i < button.length; i++) {
  button[i].onclick = function () {
     alert(i);
   }
}
и, соответственно, когда ты кликаешь, берётся то значение i которое осталось последним в рамках вышестоящей функции(или глобала), а не уникальное для блока.
Ксли ты сделаешь так:
for (var i=0; i < button.length; i++)
  button[i].onclick = function () {
     alert(i);
   }
i='от так уот';

То при клике alert тебе даст именно последнее значение которое приняло i в рамках функции.

А вообще, прочитай ты уже чёртов учебник.

jsdump 20.01.2020 11:27

Я так понял мой вопрос не до конца поняли здесь. Попробую сформулировать иначе. Верно ли что var создает указатель на переменную, в то время как let саму переменную?

ksa 20.01.2020 14:35

Цитата:

Сообщение от jsdump
Верно ли что var создает указатель на переменную, в то время как let саму переменную?

Разница этих объявлений описана в букваре. ;)
Цитата:

У объявлений переменной через let есть три основных отличия от var:
1. Область видимости переменной let – блок {...}.
2. Переменная let видна только после объявления.
3. При использовании в цикле, для каждой итерации создаётся своя переменная.
https://learn.javascript.ru/let-const

Aetae 20.01.2020 22:49

Цитата:

Сообщение от jsdump (Сообщение 518928)
Я так понял мой вопрос не до конца поняли здесь. Попробую сформулировать иначе. Верно ли что var создает указатель на переменную, в то время как let саму переменную?

Нет.
Дело не в переменных. Ты совсем не понимаешь javascript. Вообще. Читай, долбанный, учебник. Сначала. Иначе так и будешь задавать безумные вопросы.

MallSerg 21.01.2020 02:19

Цитата:

Сообщение от jsdump
var создает переменные как свойство объекта window.

Это утверждение ошибочно.
В javaScript программист не может создавать либо освобождать переменные. Этим занимается интерпретатор по своему усмотрению.
let var const - это объявления т.е. программист объявляет что собирается использовать такие то имена для хранения данных.
На объявления применяется концепция области видимости.

Цитата:

Сообщение от jsdump
Верно ли что var создает указатель на переменную.в то время как let саму переменную?

Указателей в JS не существует. На самом деле все проще объявления объявляют, присваивания присваивают а операторы совершают операции над операндами. Проблемы возникают когда появляются придуманные указатели.
Язык JavaScript использует очень высокий уровень абстракций в своем описании и частая проблема новичков в том что они выдумывают себе как должна вести себя программа/скрипт для того чтобы дополнить свое незнание всех слоев этих абстракций
а потом долго тупят не понимая почему это работает не так как они придумали.


Часовой пояс GMT +3, время: 03:17.