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)

Octane 10.02.2010 19:34

Кстати о практическом применении #12. Недавно спрашивали, почему здесь ничего не работает:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
jQuery.noConflict();
function $() {}
$(); // $ is not a function
</script>

Без понимания того, что функция $ будет создана раньше, чем выполнится jQuery.noConflict, найти ошибку было бы сложно.

PeaceCoder 10.02.2010 19:38

Цитата:

Сообщение от Octane
ез понимания того, что функция $ будет создана раньше,

А это уже кстати ерунда. компилятор никогда не должен забегать на перед и создавать функции раньше их использования, в этом беда JS. Как сказал гозар у меня написано в подписи. А то что делает ECMA - пытается добавить интеллектуальности компилятору - его и губит.

Kolyaj 10.02.2010 19:41

Цитата:

Сообщение от PeaceCoder
компилятор никогда не должен забегать на перед и создавать функции раньше их использования, в этом беда JS.

Чушь.

PeaceCoder 10.02.2010 19:44

Цитата:

Сообщение от Kolyaj
Чушь.

Это не чушь, а сотни набитых шишек на голове опытных программистов. Попробуйте в С++ создать функцию позже ее ипользования...
Изза этого кстати, eval и медленный, т.к. компилятор сначала пытается найти такие вот функции, а потом все остальное.

Kolyaj 10.02.2010 20:27

Цитата:

Сообщение от PeaceCoder
Попробуйте в С++ создать функцию позже ее ипользования...

Функции в C++ создаются на этапе компиляции, так что в любом случае до использования, не зависимо от места объявления.

Цитата:

Сообщение от PeaceCoder
компилятор сначала пытается найти такие вот функции, а потом все остальное.

Он в любом случае парсит весь скрипт сначала, eval тут не причем.

B@rmaley.e><e 10.02.2010 21:07

Цитата:

Сообщение от PeaceCoder
Попробуйте в С++ создать функцию позже ее ипользования...

Да не вопрос, только прототип объявить.

PeaceCoder 10.02.2010 21:24

Цитата:

Сообщение от B@rmaley.e><e
Да не вопрос, только прототип объявить.

Правильно. Это и есть обьявление функции, только без тела. тело подкрепляется потом. В обьявлении прототипа главное то, что нам уже есть куда ссылаться при компилации ее использования.

x-yuri 10.02.2010 22:38

Цитата:

Сообщение от Octane
Кстати о практическом применении #12. Недавно спрашивали, почему здесь ничего не работает:

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

Цитата:

Сообщение от Kolyaj
Он в любом случае парсит весь скрипт сначала, eval тут не причем.

ну я, думаю, объявление функций перед использованием ускоряет компиляцию. Это и было причиной такого правила. Вопрос в том, насколько далеко в прошлое PeaceCoder хочет вернуться ;)

Kolyaj 10.02.2010 23:52

Цитата:

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

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

Dmitry A. Soshnikov 14.02.2010 16:38

Тест - просто спортивное состязание для себя, больше, конечно теоретический, но и на практике многое пригодится.

Здесь ещё дополнительные вопросы пишут: http://groups.google.ru/group/comp.l...170b5696?hl=en


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