14.02.2010, 19:50
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от Dmitry A. Soshnikov
|
alert((function(){return 2*3;}).toString() === function () { return 6; }.toString())
|
Имхо, зависит от реализации. Если браузер пожелает на этапе прекомпиляции посчитать константы, то почему бы и нет.
|
|
14.02.2010, 22:12
|
Профессор
|
|
Регистрация: 25.02.2008
Сообщений: 707
|
|
Сообщение от Octane
|
а да… после операции присваивания мы получим ссылку на функцию. Тогда так:
Метод reverse по завершении алгоритма выполняет return this, а т.к. мы получим на него ссылку в результате операции присваивания, то вызван по этой ссылке он будет в контексте window, и возвратит соответственно window.
|
Да, но только ещё более правильно не привязываться в объяснении к конкретным "ссылку на reverse", а сказать, что this определяется по тому, как записано выражение вызова. Если слева от точки находится объект типа Reference - то в качестве this будет использована база этого объекта. Если любого другого типа - в качестве this будет использован null. А так как null особого смысла для this не несёт, автоматом подставляется глобальный объект.
Поэтому не важно, куда сохраняется ссылка на reverse (хоть на саму себя), главное, что после присваивания, будет уже не Reference type, и поэтому, this === global:
([].reverse = [].reverse)() === window; // true
На примере выше то же самое можно разобрать: Javascript quiz · Perfection kills
Сообщение от 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.
Последний раз редактировалось Dmitry A. Soshnikov, 15.02.2010 в 00:49.
|
|
15.02.2010, 01:45
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от x-yuri
|
ну я, думаю, объявление функций перед использованием ускоряет компиляцию.
|
Сообщение от Kolyaj
|
Каким образом? Как парсился весь скрипт до выполнения, так и парсится.
|
я скорее про какой-нибудь C или типа того. А зачем тогда было такое ограничение? Просто чтобы упростить комплиятор?
|
|
15.02.2010, 07:45
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от x-yuri
|
А зачем тогда было такое ограничение?
|
В си? Полагаю, для валидации кода в один проход.
|
|
15.02.2010, 08:05
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
(не зная, как это делается) так и так можно в один проход: запоминать имена используемых идентификаторов, при этом, находя объявление, помечать их найденными
|
|
15.02.2010, 09:13
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Точно, можно и так.
|
|
15.02.2010, 17:21
|
|
Профессор
|
|
Регистрация: 15.12.2009
Сообщений: 742
|
|
Сообщение от x-yuri
|
при этом, находя объявление, помечать их найденными
|
ключевые слова "при этом"
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
|
|
15.02.2010, 19:23
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
На хабре промелькнуло еще несколько вопросов. Но по сравнению с теми, которые были тут, там просто легкотня.
|
|
16.02.2010, 12:18
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от B@rmaley.e><e
|
там просто легкотня
|
из Twitter:
Цитата:
|
Сообщение от DmitryBaranovsk
|
@pepelsbey Сайт ещё одно доказательство того, что люди ни хрена не знают JavaScript
|
Сообщение от pepelsbey
|
Удивительно, но я понимаю часть этих шуток: http://wtfjs.com/ #wtfjs
|
|
|
|
16.02.2010, 12:46
|
|
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от Octane
|
http://wtfjs.com/
|
Там, кстати, и ошибки есть. Например на последней странице:
NaN === 'number' // true
кто-то съел typeof.
А вот
[] == ![] // true
Мне понравилось.
Последний раз редактировалось B@rmaley.e><e, 16.02.2010 в 12:52.
|
|
|
|