Почему я нахожу Javascript/jQuery настолько трудным разобраться?

Мое образование находится в C, и я взял PHP, MySQL, HTML, CSS без слишком большого количества проблемы.

Но я нахожу Javascript/jQuery удивительно трудным разобраться. Очень печальный. Почему?

  1. Это, кажется, нарушает много традиционных принципов программирования (например, переменный объем)

  2. Неопределенные переменные, кажется, появляются откуда ни возьмись и уже имеют значения, связанные с ними. Например (из документов jQuery):

    $("a").click(function(event) {
        event.preventDefault();
        $('
    ') .append('default ' + event.type + ' prevented') .appendTo('#log'); });

    Что такое точно "событие"? Я должен использовать это имя переменной? Я должен просто предположить, что этот объект волшебно инстанцируют с правильным материалом, и я могу использовать какой-либо список методов в API JQuery?

  3. Кажется, существует набор случайных правил (например, возвращать false для остановки действия по умолчанию, но иногда это не работает?)

  4. Недетерминированное поведение при отладке. (например, Я обновляю браузер, пробую что-то и получаю результат X для переменных JS, которые я наблюдаю в Firebug. Я обновляюсь снова, и я получаю результат Y?)

  5. Очень грязно выглядящий код, которому трудно следовать. Что происходит когда? Я использую Firebug и Инструменты Разработчика Chrome, но я не получаю достаточно видимости.

Это каждый день походит существует некоторый случайный JS "правило", которое подходит, который я никогда не видел прежде ни в одной из моих книг JS или учебных руководств.

Что я должен сделать для создания Javascript/jQuery более детерминированным, управляемым и логичным мне?

Есть ли какие-либо ресурсы, которые объясняют причуды/глюки JavaScript?

Спасибо!

48
задан harto 4 August 2010 в 05:33
поделиться

11 ответов

Книга Дугласа Крокфорда « Javascript: The Good Parts » была бесценным ресурсом. Javascript намного больше похож на Lua, Lisp или Python, чем на C, он просто СМОТРЕТЬ, как C.

Ссылка на Amazon; Я взял свой у О'Рейли.

10
ответ дан 26 November 2019 в 19:05
поделиться

1) Похоже, что это нарушает ряд традиционных принципов программирования (например, область видимости переменных)

Вам необходимо объявить переменные с помощью var , иначе они перейдут в глобальную область видимости.

2) Неопределенные переменные появляются из ниоткуда и уже имеют связанные с ними значения (как это произошло?)

Это, возможно, связано с 1) и / или 4).

3) Кажется, существует множество случайных правил (например, return false, чтобы остановить действие по умолчанию, но иногда это не работает?)

Вам также нужно позволить обработчику возвращать false. Например. form onsubmit = "return functionname ()" . Вам также необходимо вернуться из «основной» функции, а не только из закрытия (функция внутри функции), ссылаясь на ваш предыдущий вопрос . Он только вернется в "основную" функцию и продолжит работу.

4) Недетерминированное поведение при отладке. (например, я обновляю браузер, пробую что-то и получаю результат X для переменных JS, которые наблюдаю в Firebug. Я обновляюсь снова и получаю результат Y?)

Вероятно, код был выполнен до того, как HTML DOM завершил заполнение. Вам нужно подключить window.onload или $ (document) .ready () всякий раз, когда вы хотите выполнить что-то во время загрузки страницы.

5) Очень запутанный код, которому трудно следовать. Что происходит, когда? Я использую Firebug и Chrome Developer Tools, но мне не хватает видимости.

Готов поспорить, вы говорите об исходном коде jQuery? Это просто большая библиотека. В конце концов, вы не должны беспокоиться об этом при отладке. Скорее беспокойтесь о собственном коде.Однако убедитесь, что вы просматриваете неуинифицированную версию исходного кода jQuery.


См. Также:

12
ответ дан 26 November 2019 в 19:05
поделиться

« Javascript: The Good Parts » Крокфорда дает некоторые общие шаблоны JS, которые помогают с переменной приватизацией и определением области видимости. Это вообще для javascript. Для jQuery я просто использую API. Также неплохие видео Yui Theater на javascript

2
ответ дан 26 November 2019 в 19:05
поделиться

Если честно, я думаю, вы хорошо понимаете. Некоторые из моих зависаний были похожи. Я двигался следующим образом: «Ну, если это так, значит, так оно и есть». Просто примите идиосинкразии и двигайтесь вперед. PHP делает то же самое (переменные могут появляться из ниоткуда и т. Д.). Просто кодируйте так, как хотите, и если это сработает, тогда отлично!

Затем, когда вы доберетесь до этого момента, начните разбирать профилировщик и посмотрите, есть ли что-нибудь, что вы можете оптимизировать.

Вот пара вещей:

Если вы разбираетесь в CSS, то с селекторами jQuery должно быть легко. Что касается кода, это тоже просто, если вы можете иметь дело с цепочкой и JSON. РЕДАКТИРОВАТЬ: также документация jQuery по всему ОТЛИЧНО! И здесь, на SO, нет недостатка в экспертах по jQuery, которые могут помочь нам, новичкам (и, надеюсь, мы сможем вернуть услугу новичкам).

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

. Javascript не похож на язык на основе C (даже C ++ или PHP). Он использует прототипы для работы с отношениями класс / объект, а не схему подкласса.

Первое, что меня зациклило, это то, что любой JS-код, который появляется где-нибудь на странице или включен в теги