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,589

Скорее вопрос "почему 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,589

Потому что 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, 11:27
Новичок на форуме
Отправить личное сообщение для jsdump Посмотреть профиль Найти все сообщения от jsdump
 
Регистрация: 15.01.2020
Сообщений: 9

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

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

Сообщение от jsdump Посмотреть сообщение
Я так понял мой вопрос не до конца поняли здесь. Попробую сформулировать иначе. Верно ли что var создает указатель на переменную, в то время как let саму переменную?
Нет.
Дело не в переменных. Ты совсем не понимаешь javascript. Вообще. Читай, долбанный, учебник. Сначала. Иначе так и будешь задавать безумные вопросы.
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 21.01.2020, 02:19
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

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

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение доступа к элементам массива который является свойством объекта 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