Свойством какого объекта являются let переменные?
var создает переменные как свойство объекта window. А свойством какого объекта являются переменные созданные при помощи let?
|
Цитата:
|
А почему разработчики так сделали? Почему не создали объект?
|
Скорее вопрос "почему var объявленные глобально попадают в window". По логике языка - не должны. Чистое легаси. Переменные это переменные, свойства объекта - это свойства объекта.
|
Вот есть код:
for (let i=0; i < button.length; i++) button[i].onclick = function () { alert(this); } Он ставит функцию обработчик на событие и значение переменной i в придачу. На каждой итерации цикла новое значение i запасает в свой button элемент. А почему var вместо let так не может? Почему бы ему запасти для кажого button свой window.i ? |
Потому что 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 в рамках функции. А вообще, прочитай ты уже чёртов учебник. |
Я так понял мой вопрос не до конца поняли здесь. Попробую сформулировать иначе. Верно ли что var создает указатель на переменную, в то время как let саму переменную?
|
Цитата:
Цитата:
|
Цитата:
Дело не в переменных. Ты совсем не понимаешь javascript. Вообще. Читай, долбанный, учебник. Сначала. Иначе так и будешь задавать безумные вопросы. |
Цитата:
В javaScript программист не может создавать либо освобождать переменные. Этим занимается интерпретатор по своему усмотрению. let var const - это объявления т.е. программист объявляет что собирается использовать такие то имена для хранения данных. На объявления применяется концепция области видимости. Цитата:
Язык JavaScript использует очень высокий уровень абстракций в своем описании и частая проблема новичков в том что они выдумывают себе как должна вести себя программа/скрипт для того чтобы дополнить свое незнание всех слоев этих абстракций а потом долго тупят не понимая почему это работает не так как они придумали. |
Как она может создаваться каждый раз своя для каждой итерации, если она по совместительности еще и счетчик цикла? Если бы она каждый раз создавалась своя, то при каждой новой итерации она бы обнулялась и цикл никогда бы не закончился.
|
jsdump, а вот так, алле гоп *делает сальтуху*.
Тебе выше уже сказали: javascript - высокоуровневый язык, в нём всё делается для удобства программиста, а не компилятора. Тебя не должно волновать что за магию используют движки для оптимизации всех этих наворотов и генерации машинного кода, ты просто должен их использовать. Можешь считать что никакого цикла на самом деле нет, а есть просто {button.length} блоков написанных подряд и исходить из этого в поведении var и let. |
Часовой пояс GMT +3, время: 11:08. |