Use strict не работает
Почему ошибка не появляется? В use strict же нельзя объявлять переменные без var.
'use strict'; x = (this.x = 5, console.log(this.x)); console.log(x); |
у тебя там сначала this.x = 5 отрабатывает. С точки зрения компилятора это уже не объявление, а присваивание. Присваивание в use strict не запрещается. Вообще, это конечно очередной wtf, привет от крокфорда.
|
Сначала срабатывает выражение в скобках, а так как this === window, то this.x === window.x, следовательно мы не объявляем переменную, а присваиванием x для window. Скобки возвращают undefined, точнее, результат выполнения console.log, и этот результат (undefined) мы записываем уже в созданный ранее x.
'use strict'; x = null; function x() {} console.log(x); 'use strict'; x = (function() { this.x = null; }.call(this), { foo: 'bar' }); console.log(x.foo); //bar |
А разве не должна сначала пройти компиляция, при которой собирается контекст, вытаскиваются все объявления переменных и только потом всё выполняться?
То есть ещё на первом этапе должно выяснится, что болтается некоторая неприкаянная переменная x. |
vasa_c, я тоже так думал :)
|
Часовой пояс GMT +3, время: 07:20. |