Подтвердить что ты не робот

Почему я считаю, что Javascript/jQuery так сложно получить?

Мой фон находится на C, и я выбрал PHP, mySQL, HTML, CSS без лишних проблем.

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

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

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

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

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

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

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

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

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

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

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

Спасибо!

4b9b3361

Ответ 1

Дуглас Крокфорд " Javascript: хорошие части" был бесценным ресурсом. Javascript гораздо больше похож на Lua, Lisp или Python, чем на C, это просто происходит, как LOOK, например C.

Ссылка предоставлена ​​Amazon; Я схватил меня за О'Рейли.

Ответ 2

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

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

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

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

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

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

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

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

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

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


См. также:

Ответ 3

Честно говоря, я думаю, что у вас хорошее понимание. Некоторые из моих зависаний были похожи. То, как я продвигаюсь, "хорошо, если так, как есть, то так оно и есть". Просто примите особенности и плуг вперед. PHP делает некоторые из тех же вещей (переменные могут появляться из ниоткуда и т.д.). Просто введите код, который вы хотите закодировать, и если он будет работать, тогда отлично!

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

Вот несколько вещей:

Если вы понимаете CSS, то селектора jQuery должны быть легкими. Что касается кода, то это просто, если вы можете иметь дело с chaining и JSON. EDIT: также, jQuery-документация обо всем будет ОТЛИЧНО! И здесь нет недостатка экспертов jQuery в SO, чтобы помочь нам noobs (и, надеюсь, мы сможем вернуть пользу новым нообам).

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

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

# 1, которая бросала меня за цикл, заключается в том, что любой JS, который появляется в любом месте на странице или который был включен в теги <script>, является честной игрой. Если у вас есть глобальная переменная в одном script, вы можете использовать эту же переменную в совершенно другом script, и она будет работать. Это может быть то, что вы имеете в виду о переменных, появившихся из ниоткуда. Кроме того, есть некоторые DOM-переменные, которые могут просто "отображаться".

В любом случае, я думаю, что если вы просто пахаете вперед, вы получите несколько моментов "AHA". Я относительный noob для программирования, но я постоянно расти, пока я не зависаю от чего-то, что не оказывает большого влияния на фактическое выполнение кода.

Ответ 4

  • Это язык, основанный на прототипном наследовании, и на него влияют функциональные языки программирования и парадигма, поэтому он не является полностью OO/процедурным, как другие языки. Переменные подразумеваются глобальными, если они не объявлены с помощью var.

  • Пожалуйста, укажите пример?

  • return false выходит из функции, как с любым оператором возврата языка. preventDefault() будет DOM-методом для отмены поведения по умолчанию ссылки

  • Javascript используется в первую очередь на стороне клиента. Поскольку существует множество пользовательских агентов, каждая из них имеет различную реализацию DOM, которая очень противоречива, чем сама JS. Опять же, пожалуйста, включите реальный пример, чтобы получить окончательный ответ.

  • Вы найдете беспорядочно выглядящий код на любом языке, и, возможно, ваше отсутствие понимания воспринимает код как беспорядочный, когда на самом деле это не так уж плохо. Или, может быть, вы смотрите на какой-то миниатюрный/обфусканный код.

Я рекомендую http://eloquentjavascript.net/ для изучения аспектов Javascript.

Вещи, которые вы узнаете из приведенной выше ссылки

  • лямбды
  • закрытие
  • Прототипное наследование
  • Программирование на основе событий
  • Отладка
  • DOM

Ответ 5

"JavaScript: хорошие детали" Дугласа Крокфорда - хорошее начало

В вашем случае приложения ( "плохие части" и "ужасные части" ) могут быть самыми интересными:)

Ответ 6

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

Ответ 7

Javascript может быть немного сложным, и некоторые из его функциональных аспектов смущают людей. Если вы действительно изучаете и понимаете язык, вы найдете его действительно полезным, большинство людей просто случайно начинают его использовать, а затем просто ненавидят.

Прочитайте javascript хорошие части crockford, это действительно полезно: http://javascript.crockford.com/

Также убедитесь, что вы понимаете closure. Это фундаментальное явление, которое люди не получают, но часто используют.

Ответ 8

В терминах переменной scope существуют локальные и глобальные переменные. В этом примере можно увидеть один из getchyas переменной области видимости:

var thisIsAGlobalVariable
function anon () { 
   var thisIsALocalVariable
   thisIsAGlobalVariable = 5; //if you don't use the var prefix inside a fn, it becomes global
}

Ответ 9

Вам сложно, потому что:

  • javascript имеет другой вид синтаксиса.
  • javascript dificult для отладки
  • javascript не имеет автозаполнения, например, С# и т.д.) или делает это
  • javascript имеет нелогичные правила (они становятся логичными после того, как вы их знаете)
  • все может быть сделано 1000 способами, и когда вы ищете решение, вы найдете ответы на 2000 год:), где С#, php, в основном, имеют хорошую практическую функцию u "should/could" использовать

Тем не менее, я начал использовать js/jquery полгода назад с теми же соображениями, что и вы, и я придерживался этого, и теперь я использую его каждый день, чтобы улучшить свои веб-приложения.

Мне просто нравится (особенно jquery). Это спасатель жизни, я знаю, что и где смотреть, я могу с этим справиться.

Все кажется логичным.

Если я могу дать вам один совет: javascript/jquery - это кислое яблоко, но просто висеть там, бит корыта, и вы не пожалеете об этом.

также, loooot людей использует его и всегда готов протянуть руку при необходимости (я знаю, что знаю)

Ответ 10

Javascript сложный. У вас нет компилятора, который следит за вашей спиной. Чтобы компенсировать, модульное тестирование становится более важным. Я выполнял модульное тестирование с помощью jQuery/QUnit, но недавно я начал использовать Jasmine (http://github.com/pivotal/jasmine), и я рекомендую его на 200%, Его отличная платформа тестирования.

Если вы не знакомы с тестированием или тестированием с помощью javascript, я бы настоятельно рекомендовал найти модульные тесты для других проектов OSS javascript (надеюсь, для кода, который вы могли бы использовать) и посмотреть, как они его тестируют.

С модульными тестами вы будете совершать те же ошибки, но поймать их намного раньше и с меньшим горем. И если ваши тесты хорошие, ошибки не вернутся после того, как вы исправите tham.

Ответ 11

Я не знаю, сколько дизайна пользовательского интерфейса вы сделали на C, но переменная события появляется только тогда, когда она отправляется вызывающим, а обработчик должен обрабатывать объект. Если вы читаете объект события, путаница в q # 2 должна исчезнуть.

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

Ответ 12

Возможно, вам нужно связать свой код с кнопкой HTML onclick="event()", чтобы отключить его как событие.