Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2016, 02:38
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

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

'use strict';

x = (this.x = 5, console.log(this.x));
console.log(x);
Ответить с цитированием
  #2 (permalink)  
Старый 23.01.2016, 08:53
Интересующийся
Посмотреть профиль Найти все сообщения от newuserjs2016
 
Регистрация: 22.01.2016
Сообщений: 18

у тебя там сначала this.x = 5 отрабатывает. С точки зрения компилятора это уже не объявление, а присваивание. Присваивание в use strict не запрещается. Вообще, это конечно очередной wtf, привет от крокфорда.
Ответить с цитированием
  #3 (permalink)  
Старый 23.01.2016, 09:06
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

Последний раз редактировалось ruslan_mart, 23.01.2016 в 09:12.
Ответить с цитированием
  #4 (permalink)  
Старый 23.01.2016, 12:45
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

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

То есть ещё на первом этапе должно выяснится, что болтается некоторая неприкаянная переменная x.
Ответить с цитированием
  #5 (permalink)  
Старый 23.01.2016, 14:39
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

vasa_c, я тоже так думал
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11