- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
let windows = [];
for(let i=0;i<30;i++) {
windows.push(open('about:blank', 'w'+i, 'width=220,height=220'));
windows[windows.length-1].document.write('<img width="200" src="https://yandex.ru/images/_crpd/QXyR57D17/58778cEG/ztbSEyQN1MQPOKIh-mQphsVGWJdV_rEIEfYazmN1g0xPpX0igbVWfIKWpfMEAObKC6K6ZWrKj3oC51h2Nj70EtoS5kOEGYXVP10XoFpA">');
}
let x = 0;
for(let i=0;i<30;i++) {
setTimeout(function run() {
if(x > 10000) {
windows[i].close();
return;
}
x++;
windows[i].moveTo((Math.random()*screen.width).toFixed(), (Math.random()*screen.height).toFixed());
setTimeout(run, 100);
});
}
Konardyan 27.12.2019 02:22 # −1
Кстати, лови палочку.
Bad_Wolf 27.12.2019 02:39 # +1
Rooster 27.12.2019 09:54 # −1
guestinxo 27.12.2019 11:02 # −1
Rooster 27.12.2019 12:02 # −1
guestinxo 27.12.2019 12:08 # 0
Rooster 27.12.2019 15:01 # −1
guestinxo 28.12.2019 06:54 # −1
Rooster 28.12.2019 15:16 # 0
Rooster 28.12.2019 15:17 # −1
guestinxo 28.12.2019 22:02 # −1
bootcamp_dropout 27.12.2019 16:26 # −1
Rooster 28.12.2019 04:38 # 0
XYPO3BO3 28.12.2019 04:50 # +1
У некоторых браузеров замыкание захватывает значение x, текущее на момент вызова замыкания. Т. е. замыкание хранит ссылку на x. Поскольку замыкание вызывают после цикла, а после цикла значение x равно трём, то получается [3,3,3].
У других же браузеров замыкание захватывает значение x, текущее на момент создания замыкания. Т. е. x передаётся по значению. Поэтому создаётся три разных замыкания, каждое со своим значением x, и на выходе получается [1,2,3].
bormand 28.12.2019 04:53 # 0
XYPO3BO3 28.12.2019 05:00 # 0
& означает захват по ссылке.
Я не говорю уже про кресты, где тоже захват явно по значению или по ссылке.
guest8 28.12.2019 05:01 # −999
XYPO3BO3 28.12.2019 05:20 # 0
В «Питоне» есть атрибуты global и nonlocal, которые подсказывают, откуда именно можно захватить, но это всё равно не то.
guest8 28.12.2019 05:26 # −999
XYPO3BO3 28.12.2019 05:42 # 0
guest8 28.12.2019 05:00 # −999
guest8 28.12.2019 05:00 # −999
bormand 28.12.2019 06:31 # +1
Слабаки.
Rooster 28.12.2019 14:55 # +1
ANS 94 — чуть больше 200 страниц.
guest8 28.12.2019 23:18 # −999
bormand 28.12.2019 06:53 # 0
> non-compliant browsers
Как всегда IE?
XYPO3BO3 28.12.2019 06:58 # 0
Non-compliant browsers — это как минимум старые «Фуррифоксы», которые были ещё не на «Растишке», и «Сафари» (там не «V8», а свой движок).
XYPO3BO3 28.12.2019 07:05 # 0
Так вот «Goanna 3.x» — non-compliant, а «Goanna 4.x» — compliant.
Страшно, когда в разных версиях одного браузера код работает по-разному?
XYPO3BO3 28.12.2019 07:02 # 0
Надо посмотреть.
arr мы не захватывали, он же просто попадает в тело цикла из обрамляющего блока.
XYPO3BO3 28.12.2019 07:16 # 0
guest8 28.12.2019 22:06 # −999
guestinxo 28.12.2019 22:08 # 0
fuckyou 28.12.2019 23:06 # 0
XYPO3BO3 29.12.2019 00:59 # 0
LLapcKuu_nemyx 04.01.2020 13:19 # 0
1024-- 30.12.2019 10:39 # +1
guestinxo 30.12.2019 12:43 # 0
1024-- 30.12.2019 10:38 # +1
У меня в хроме пример хурозвоза выдал выдал 1,2,3.
Запустим вот такой код (в комментариях - то, что получил я):
И 1, 2, 3 vs 3, 3, 3 - вышедший наружу обсуждавшийся выше философский вопрос о том, создаётся ли новая переменная с тем же именем внутри цикла, или же там она каждый раз новая.
HoBorogHuu_nemyx 30.12.2019 10:47 # 0
Похоже, что и вправду дело не в передаче по значению, а в реализации цикла (создание нового объекта на каждой итерации или изменение значения существующего объекта).
3.14159265 30.08.2021 02:30 # 0
> У некоторых браузеров замыкание захватывает значение x, текущее на момент вызова замыкания.
Это у каких?
Приведи реальный пример.
ABryCTOBCKuu_nemyx 30.08.2021 02:32 # +1
https://stackoverflow.com/questions/36684191/using-const-in-es6-for-of-loop
Там только написано «Some non-compliant browsers», а реальных примеров автор так и не привёл.
ABryCTOBCKuu_nemyx 30.08.2021 02:34 # +1
http://govnokod.ru/26280#comment518162
В «Goanna» (форк «Gecko») в версии 3.x было «non-compliant», а в 4.x сделали «compliant».
Надо ещё посмотреть, как было сделано в самых первых версиях браузерных движков, когда слово «let» только-только появилось («Хром 41...48», «Safari 10», «IE 11»).
3.14159265 30.08.2021 02:39 # 0
bormand 27.12.2019 22:49 # 0
guest8 27.12.2019 23:04 # −999
guest8 27.12.2019 23:47 # −999