Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.01.2020, 09:46
Новичок на форуме
Отправить личное сообщение для jsdump Посмотреть профиль Найти все сообщения от jsdump
 
Регистрация: 15.01.2020
Сообщений: 9

Свойством какого объекта являются let переменные?
var создает переменные как свойство объекта window. А свойством какого объекта являются переменные созданные при помощи let?
Ответить с цитированием
  #2 (permalink)  
Старый 19.01.2020, 10:29
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от jsdump
А свойством какого объекта являются переменные, созданные при помощи letconst]?
Никакого объекта, где были бы доступны такие переменные, не существует. Эти переменные доступны только в вашем скрипте (учитывая блочную видимость). Если вам нужен объект, то вы можете его создать сами!
Ответить с цитированием
  #3 (permalink)  
Старый 19.01.2020, 17:48
Новичок на форуме
Отправить личное сообщение для jsdump Посмотреть профиль Найти все сообщения от jsdump
 
Регистрация: 15.01.2020
Сообщений: 9

А почему разработчики так сделали? Почему не создали объект?
Ответить с цитированием
  #4 (permalink)  
Старый 19.01.2020, 18:57
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

Скорее вопрос "почему var объявленные глобально попадают в window". По логике языка - не должны. Чистое легаси. Переменные это переменные, свойства объекта - это свойства объекта.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 19.01.2020, 23:43
Новичок на форуме
Отправить личное сообщение для jsdump Посмотреть профиль Найти все сообщения от jsdump
 
Регистрация: 15.01.2020
Сообщений: 9

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

Он ставит функцию обработчик на событие и значение переменной i в придачу.
На каждой итерации цикла новое значение i запасает в свой button элемент. А почему var вместо let так не может? Почему бы ему запасти для кажого button свой window.i ?
Ответить с цитированием
  #6 (permalink)  
Старый 20.01.2020, 00:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

Потому что 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 в рамках функции.

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

Последний раз редактировалось Aetae, 20.01.2020 в 00:04.
Ответить с цитированием
  #7 (permalink)  
Старый 20.01.2020, 03:57
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от jsdump
А почему var вместо let так не может?
А почему оно должно так мочь? Раз они называются по-разному, то наверное это не одно и тоже. Там нет тайного смысла, это разные объявления переменных, для разных целей. Цель var это область видимости функция function(){...}, цель let это область видимости блок {...}, поскольку и там и там есть синтаксис блока, то var можно вообще не использовать. Но исторически так сложилось, что сначала было только одно var, с 90-х, а уже потом в 2015-м только появилось let.

Синтаксис цикла это компактная запись повторов кода:
for (let i = 0; i < 3; i++) {
   // ...
}

// тоже самое
{ 
    let i = 0;
    //...
}
{ 
    let i = 1;
    //...
}
{ 
    let i = 2;
    //...
}

Последний раз редактировалось Rise, 20.01.2020 в 04:05.
Ответить с цитированием
  #8 (permalink)  
Старый 20.01.2020, 11:27
Новичок на форуме
Отправить личное сообщение для jsdump Посмотреть профиль Найти все сообщения от jsdump
 
Регистрация: 15.01.2020
Сообщений: 9

Я так понял мой вопрос не до конца поняли здесь. Попробую сформулировать иначе. Верно ли что var создает указатель на переменную, в то время как let саму переменную?
Ответить с цитированием
  #9 (permalink)  
Старый 20.01.2020, 14:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от jsdump
Верно ли что var создает указатель на переменную, в то время как let саму переменную?
Разница этих объявлений описана в букваре.
Цитата:
У объявлений переменной через let есть три основных отличия от var:
1. Область видимости переменной let – блок {...}.
2. Переменная let видна только после объявления.
3. При использовании в цикле, для каждой итерации создаётся своя переменная.
https://learn.javascript.ru/let-const
Ответить с цитированием
  #10 (permalink)  
Старый 20.01.2020, 22:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

Сообщение от jsdump Посмотреть сообщение
Я так понял мой вопрос не до конца поняли здесь. Попробую сформулировать иначе. Верно ли что var создает указатель на переменную, в то время как let саму переменную?
Нет.
Дело не в переменных. Ты совсем не понимаешь javascript. Вообще. Читай, долбанный, учебник. Сначала. Иначе так и будешь задавать безумные вопросы.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение доступа к элементам массива который является свойством объекта black_viper Общие вопросы Javascript 17 30.10.2016 20:22
Переменная через var тоже является свойством объекта window? lancer Общие вопросы Javascript 6 28.07.2013 14:21
Как узнать у какого объекта вызван метод. Scalar Events/DOM/Window 4 26.03.2010 11:10
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00