Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Use strict не работает (https://javascript.ru/forum/misc/60847-use-strict-ne-rabotaet.html)

Decode 23.01.2016 02:38

Use strict не работает
 
Почему ошибка не появляется? В use strict же нельзя объявлять переменные без var.

'use strict';

x = (this.x = 5, console.log(this.x));
console.log(x);

newuserjs2016 23.01.2016 08:53

у тебя там сначала this.x = 5 отрабатывает. С точки зрения компилятора это уже не объявление, а присваивание. Присваивание в use strict не запрещается. Вообще, это конечно очередной wtf, привет от крокфорда.

ruslan_mart 23.01.2016 09:06

Сначала срабатывает выражение в скобках, а так как 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

vasa_c 23.01.2016 12:45

А разве не должна сначала пройти компиляция, при которой собирается контекст, вытаскиваются все объявления переменных и только потом всё выполняться?

То есть ещё на первом этапе должно выяснится, что болтается некоторая неприкаянная переменная x.

Decode 23.01.2016 14:39

vasa_c, я тоже так думал :)


Часовой пояс GMT +3, время: 07:20.