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, время: 21:57. |