Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   А как же работает наш любимый JS. (https://javascript.ru/forum/misc/50640-kak-zhe-rabotaet-nash-lyubimyjj-js.html)

petya 07.10.2014 12:49

Цитата:

Сообщение от kobezzza
контекст исполнения, объект переменных и т.д. определён в стандарте ECMAScript3, а в версии ECMAScript5 был заменён на окружения,

Это не важно, они всего лишь заменили названия, сути это не меняет.

petya 07.10.2014 12:51

Цитата:

Сообщение от kobezzza
а не реализаций самой VM

Не стоит говорить о конкретной реализации, когда рассматривается семантика

kobezzza 07.10.2014 12:53

Цитата:

Сообщение от petya (Сообщение 333844)
Это не важно, они всего лишь заменили названия, сути это не меняет.

Следуя такой риторике можно докопаться абсолютно до чего угодно. Статья описывает ES3 и использует термины спецификации, в статьях по ES5 и ES6 используется другие термины. Всё таки статья называется не "Сферичная VM в вакууме".

petya 07.10.2014 12:58

kobezzza,
Я не рассматриваю вопросы терминологии тут вообще. Я говорю о превратном понимании автором процесса исполнения програмы. Он трактует стандарт по своему, якобы, проясняя что-то, но трактовка эта не верна.

kobezzza 07.10.2014 13:00

Цитата:

Сообщение от petya (Сообщение 333847)
kobezzza,
Я не рассматриваю вопросы терминологии тут вообще. Я говорю о превратном понимании автором процесса исполнения програмы. Он трактует стандарт по своему, якобы, проясняя что-то, но трактовка эта не верна.

Цитата:

Сообщение от petya (Сообщение 333847)
Контекст исполнения -- это окружение, никакого "входа" в него, а тем более "исполнения", в обычном смысле, не происходит.

Цитата:

Следующие шаги выполняются, когда управление входит в контекст исполнения кода функции, который содержится в объекте функции F, значения thisArg и argumentsList передаются при вызове:

Если код функции представляет собой строгий код, то ThisBinding присвоить значение thisArg Аргумент this.

Иначе, если thisArg – null или undefined, то ThisBinding присвоить значение глобального объекта.

Иначе, если Тип(thisArg) не объект, то ThisBinding присвоить значение ToObject(thisArg).

Иначе, ThisBinding присвоить значение thisArg.

Пусть localEnv Локальное окружение будет результатом вызова NewDeclarativeEnvironment с передачей в качестве аргумента значения внутреннего свойства [[Scope]] для F.

Присвоить LexicalEnvironment значение localEnv.

Присвоить VariableEnvironment значение localEnv.

Пусть code будет значением внутреннего свойства [[code]] для F.

Выполнить Инстанциирование привязки объявления, используя code и argumentList для кода функции, в соответствии с описанием в пункте 10.5.
http://es5.javascript.ru/x10.html#x10.4.3

***

Цитата:

Он трактует стандарт по своему, якобы, проясняя что-то, но трактовка эта не верна.
Ещё раз: нашли конкретное место, где он объективно не прав - напишите ему и он поправит статью (ну или напиши свою статью с блекджеком и кудесницами), иначе всё это ничего не стоящая болтовня.

petya 07.10.2014 13:02

kobezzza,
Там говорится о входе в функцию, а не входе в окружение. Я против этого ничего не имею

petya 07.10.2014 13:09

kobezzza,
Хотя да, вот это:

Следующие шаги выполняются, когда управление входит в контекст исполнения кода функции, который содержится в объекте функции F, значения thisArg и argumentsList передаются при вызове:


Достаточно неоднозначно, забубенно, я бы сказал. Возможно, косяки перевода. Правильным определением было бы, что-то вроде:

После входа в функцию происходит разрешение имен, в соответствии с окружением и правилами связывания. Рассматриваем исключительно семантику, разумеется.

kobezzza 07.10.2014 13:13

petya, я всего лишь призываю к объективизму. Блог Сошникова, как и этот сайт один из столпов общепризнанной документации JS и стандарта ES и если ты считаешь, что автор не прав и можешь это доказать (ссылки на спеку и т.д.), то напиши ему с этими замечаниями, а не начинай кидаться какашками с умным видом. Неужели это так сложно?

Octane 07.10.2014 19:14

kobezzza, не трать время, это все тот же унылый foo/govnocoder/nanaets/newobject


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