Javascript - тонкости и секреты
Прелесть и соль Javascript заключаются всего в нескольких пунктах :
Этот компот преимуществ нельзя найти ни в одной из других технологий.
Например, такие технологии как ActiveX, VBScript, XUL - поддерживаются не в каждом браузере (не кросс-браузерны). Такие технологии как Flash, Silverlight, Java - не полностью интегрированы с браузером, работают в своем окружении.
Поэтому Javascript - уникальная технология, и таковой останется. Сейчас она развивается, создается язык Javascript 2 и новый интерпретатор.
Возможности javascript в некоторых областях, к сожалению, ограничены.
Поэтому используются альтернативные технологии.
Java тяжелая, тормозная, но может все. Она используется там, где требуется почти-десктоп приложение.
Java - один из наиболее распространенных в мире языков. На нем существует громадное количество библиотек, с помощью которых можно описывать сложные интерфейсы и алгоритмы. В вебе это нужно редко.
Flash изначально появился как кроссбраузерная платформа и язык для мультимедии, для оживления веба красочной анимацией, аудио и видео. Но не только это вкусно в технологии Flash.
Мощные средства для создания сетевых соединений(сокеты)
Объекты для работы с мультимедиа: изображениями, аудио, видео
Внутреннее хранилище объектов, которые не посылаются на сервер при каждом запросе, как куки.
Удобные графические средства разработки для Flash
Ну и для баланса - недостатки, по сравнению с javascript.
Отдельный контейнер. Например, нельзя выделить участок текста, частично находящегося в контейнере Flash.
Плохо индексируется поисковиками. Поисковики ходят по HTML-ссылкам, но(пока?) не кликают по ссылкам внутри Flash-приложения.
Из Flash можно легко вызвать javascript. Наоборот - сложнее, но тоже возможно, поэтому целесообразно знать обе технологии и применять их вместе.
JavaFX, Silverlight, XUL
Эти технологии призваны дополнять javascript в области коммуникации и построения интерфейсов.
Пока они все далеки по распространенности от javascript и flash.
- Полная интеграция с браузером
- Простые вещи делаются просто
- Поддерживается почти везде
Этот компот преимуществ нельзя найти ни в одной из других технологий.
Например, такие технологии как ActiveX, VBScript, XUL - поддерживаются не в каждом браузере (не кросс-браузерны). Такие технологии как Flash, Silverlight, Java - не полностью интегрированы с браузером, работают в своем окружении.
Поэтому Javascript - уникальная технология, и таковой останется. Сейчас она развивается, создается язык Javascript 2 и новый интерпретатор.
Возможности javascript в некоторых областях, к сожалению, ограничены.
Поэтому используются альтернативные технологии.
Java тяжелая, тормозная, но может все. Она используется там, где требуется почти-десктоп приложение.
Java - один из наиболее распространенных в мире языков. На нем существует громадное количество библиотек, с помощью которых можно описывать сложные интерфейсы и алгоритмы. В вебе это нужно редко.
Flash изначально появился как кроссбраузерная платформа и язык для мультимедии, для оживления веба красочной анимацией, аудио и видео. Но не только это вкусно в технологии Flash.
Мощные средства для создания сетевых соединений(сокеты)
Объекты для работы с мультимедиа: изображениями, аудио, видео
Внутреннее хранилище объектов, которые не посылаются на сервер при каждом запросе, как куки.
Удобные графические средства разработки для Flash
Ну и для баланса - недостатки, по сравнению с javascript.
Отдельный контейнер. Например, нельзя выделить участок текста, частично находящегося в контейнере Flash.
Плохо индексируется поисковиками. Поисковики ходят по HTML-ссылкам, но(пока?) не кликают по ссылкам внутри Flash-приложения.
Из Flash можно легко вызвать javascript. Наоборот - сложнее, но тоже возможно, поэтому целесообразно знать обе технологии и применять их вместе.
JavaFX, Silverlight, XUL
Эти технологии призваны дополнять javascript в области коммуникации и построения интерфейсов.
Пока они все далеки по распространенности от javascript и flash.
- JavaFX - "легкая" надстройка над Java, будет работать только с Java на компьютере клиента.
- XUL - язык описания интерфейсов, удобен если писать планируете только под Mozilla.
- Silverlight - конкурент Flash от Microsoft на основе .NET. Из всех технологий - он сделан позже всех, но лучше ли?
JavaScript — очень интересный и увлекательный язык программирования. Знание некоторых особенностей этого языка сильно облегчит Вам процесс работы с ним. Не будем терять время, как говорится «write less do more», поехали.
Для теста я все вложил в один HTML файл. И не забудьте о FireBug.1. Объявление фукнции
Как видите несмотря на то что вызов функции isNimble() следует до ее объявления, пример не выдает ошибку. Весь контекст просматривается JavaScript-ом полностью, только потом начинает исполняться.
Для теста я все вложил в один HTML файл. И не забудьте о FireBug.1. Объявление фукнции
Как видите несмотря на то что вызов функции isNimble() следует до ее объявления, пример не выдает ошибку. Весь контекст просматривается JavaScript-ом полностью, только потом начинает исполняться.
var canFly = function(){ return true; };2. Код после «return»
window.isDeadly = function(){ return true; };
assert( isNimble() && canFly() && isDeadly(), "Все работает")
function isNimble(){ return true; }
Не смотря на то что функция инициализирована после оператора return, при попытке запустить этот код, мы не получим ошибку, так как все еще действует правило описанное выше.
function stealthCheck(){2.1. Оператор «typeof»
var ret = stealth() == stealth();
return assert( ret, "Код после оператора return не исполнится, но ошибки не будет!" );
function stealth(){ return true; }
}
stealthCheck();
Все эти приемы не проходят, когда речь заходит о typeof. Если на момент вызова этого оператора функция не объявлена мы получим значение «undefined». Однако функция isDeadly объявлена в глобальном контексте (в данном случаем с помощью конструкции window.isDeadly), поэтому typeof isDeadly вернет нам значение «function».
assert( typeof canFly == "undefined", "canFly не объявлена" );3. Анонимные функции
assert( typeof isDeadly == "undefined", "Но isDeadly виден" );
var canFly = function(){ return true; };
window.isDeadly = function(){ return true; };
Анонимные функции могут иметь имена, но они будут видно только в той функции, к которой они относятся. Это удобно при рекурсивных вызовах. Вне функции ninja, анонимная функция myNinja уже не видна.
var ninja = function myNinja(){Функция может вызвать саму себя с помощью следующей конструкции: arguments.callee(). Эта конструкция доступна внутри любой функции.
assert( ninja == myNinja, "Эта функция с двумя именами" );
};
ninja();
assert( typeof myNinja == "undefined", "myNinja не существует, так как она анонимная");
var ninja = {В этот примере, функция рекурсивно вызывает сама себя 4 раза, а результатом будет строка «hiyaaaa». Она вызвает саму себя и передает ей значение переменной n-1 и так далее.
yell: function(n){
return n > 0 ? arguments.callee(n-1) + "a" : "hiy";
}
};
assert( ninja.yell(4) == "hiyaaaa", "arguments.callee это и есть сама функция" );
Это лишь парочка примеров. Их всех можно найти в книге Джона Резига под названием Secrets of the JavaScript Ninja. Сама книга очень интересная и полна всяких тонкостей и синтаксических конструкий. Напоследок приведу синтаксическую конструкцию из книги, которая увеличивает скорость обращения к DOM в 7 раз.
function getElements( name ) {
return getElements.cache[ name ] = getElements.cache[ name ] ||
document.getElementsByTagName( name );
}
getElements.cache = {};
Вызывается функция, передаем ей тег, который нас интересует, если он есть в getElements.cache, то функция возвращает нам его оттуда, если нету — обращается к DOM дереву и одновременно заносит его в кэш. При первом вызове время составило 0.019 мс, а при втором уже 0.002 мс.
Для начало все. Удачи Вам в разборе примеров.