Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Javascript quiz · Perfection kills (https://javascript.ru/forum/offtopic/7580-javascript-quiz-%C2%B7-perfection-kills.html)

B@rmaley.e><e 14.02.2010 19:50

Цитата:

Сообщение от Dmitry A. Soshnikov
alert((function(){return 2*3;}).toString() === function () { return 6; }.toString())

Имхо, зависит от реализации. Если браузер пожелает на этапе прекомпиляции посчитать константы, то почему бы и нет.

Dmitry A. Soshnikov 14.02.2010 22:12

Цитата:

Сообщение от Octane
а да… после операции присваивания мы получим ссылку на функцию. Тогда так:
Метод reverse по завершении алгоритма выполняет return this, а т.к. мы получим на него ссылку в результате операции присваивания, то вызван по этой ссылке он будет в контексте window, и возвратит соответственно window.

Да, но только ещё более правильно не привязываться в объяснении к конкретным "ссылку на reverse", а сказать, что this определяется по тому, как записано выражение вызова. Если слева от точки находится объект типа Reference - то в качестве this будет использована база этого объекта. Если любого другого типа - в качестве this будет использован null. А так как null особого смысла для this не несёт, автоматом подставляется глобальный объект.

Поэтому не важно, куда сохраняется ссылка на reverse (хоть на саму себя), главное, что после присваивания, будет уже не Reference type, и поэтому, this === global:

([].reverse = [].reverse)() === window; // true


На примере выше то же самое можно разобрать: http://javascript.ru/forum/offtopic/...html#post44790

Цитата:

Сообщение от Octane
Сбило то, что ([].reverse)() сохраняет контекст

Вот как раз в этом случае, всё ещё объект типа Reference (оператор группировки не вызывает GetValue), а когда мы выполнили присваивание (которое выполняет GetValue), то получили уже объект типа Function, а не Reference. Соответственно, this будет в конечном итоге определён как global.

Вот здесь разбирали: http://javascript.ru/forum/misc/5724...html#post34117

Цитата:

Сообщение от B@rmaley.e><e
Имхо, зависит от реализации. Если браузер пожелает на этапе прекомпиляции посчитать константы, то почему бы и нет.

Да, текущая версия *Monkey делает оптимизацию в этом случае и для первой функции в коде уже будет 6, а не 2 * 3.

x-yuri 15.02.2010 01:45

Цитата:

Сообщение от x-yuri
ну я, думаю, объявление функций перед использованием ускоряет компиляцию.

Цитата:

Сообщение от Kolyaj
Каким образом? Как парсился весь скрипт до выполнения, так и парсится.

я скорее про какой-нибудь C или типа того. А зачем тогда было такое ограничение? Просто чтобы упростить комплиятор?

B@rmaley.e><e 15.02.2010 07:45

Цитата:

Сообщение от x-yuri
А зачем тогда было такое ограничение?

В си? Полагаю, для валидации кода в один проход.

x-yuri 15.02.2010 08:05

(не зная, как это делается) так и так можно в один проход: запоминать имена используемых идентификаторов, при этом, находя объявление, помечать их найденными

B@rmaley.e><e 15.02.2010 09:13

Точно, можно и так.

PeaceCoder 15.02.2010 17:21

Цитата:

Сообщение от x-yuri
при этом, находя объявление, помечать их найденными

ключевые слова "при этом"

B@rmaley.e><e 15.02.2010 19:23

На хабре промелькнуло еще несколько вопросов. Но по сравнению с теми, которые были тут, там просто легкотня.

Octane 16.02.2010 12:18

Цитата:

Сообщение от B@rmaley.e><e
там просто легкотня

из Twitter:
Цитата:

Цитата:

Сообщение от DmitryBaranovsk
@pepelsbey Сайт ещё одно доказательство того, что люди ни хрена не знают JavaScript

Цитата:

Сообщение от pepelsbey
Удивительно, но я понимаю часть этих шуток: http://wtfjs.com/ #wtfjs



B@rmaley.e><e 16.02.2010 12:46

Цитата:

Сообщение от Octane
http://wtfjs.com/

Там, кстати, и ошибки есть. Например на последней странице:
NaN === 'number' // true
кто-то съел typeof.

А вот
[] == ![] // true
Мне понравилось.


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