powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / почему не видны переменные в замыканиях
10 сообщений из 10, страница 1 из 1
почему не видны переменные в замыканиях
    #38317510
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Не пойму, почему я не вижу переменную v1 из f2, и v2 из f3? Это ведь замыкание чистой воды
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var later;
f1()
function f1() {
	var v1 = 5;
	function f2() {
		var v2 = 7;
		later = function f3() {
		}
	}
	f2();
}


Заранее спасибо!
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317513
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,

в какой строчке кода не видна переменная?
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317517
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При входе в f2 и в f3
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317527
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверил, всё видно:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Language" content="ru">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<meta charset="utf-8" />
	<title>аа</title>
	<script type="text/javascript">
		window.onload = function() {
			var later;
			f1()
			function f1() {
				var v1 = 5;
				function f2() {
					var v2 = 7;
					later = function f3() {
						alert(v1 + ' ' + v2);
					}
				}
				f2();
			}
			later();
		};
	</script>
</head>
<body></body>
</html>
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317584
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,
спасибо большое за проверку! В общем переменных не видно именно в watch window, если эти переменные не используются внутри функции. То есть:
Код: javascript
1.
2.
3.
4.
		later = function f3() {
			debugger;
			var j = v1;
		}


Буду видеть в watch window только v1, а v2 undefined. Если и v2 как-то использовать в функции, то буду в watch window видеть оба. Видимо это связано с тем, что при вызове функции он не ищет в стеке вызовов переменные и не добавляет их в область видимости, если они не используются в функции, что логично.
Удачи! :)
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317594
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_G,

попробуй в Хроме (или в Яндекс-браузере) - всё норм. видно:
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317601
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,
правильно. Убери строчку "alert(v1 + ' ' + v2)" и ты их уже не увидишь :)
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317611
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximuS_GЯростный Меч,
правильно. Убери строчку "alert(v1 + ' ' + v2)" и ты их уже не увидишь :)точно!

а если оставить alert(v2); , то видна только v2.
скорее всего, оптимизация, захватываются только те переменные, которые используются. щас вспоминаю, где-то об этом читал.
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317617
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё любопытный кейс - если сделать alert(eval('v2')); , то снова видны обе переменные. Оптимизатор видит eval и на всякий случай захватывает всё что есть, т.к. неизвестно, что понадобится.
...
Рейтинг: 0 / 0
почему не видны переменные в замыканиях
    #38317629
MaximuS_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будем знать! :)
Удачи!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / почему не видны переменные в замыканиях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]