javascript практика для новичков
JavaScript Упражнения
Вы можете проверить свои навыки JavaScript с помощью упражнений Schoolsw3.
Упражнения
Мы собрали множество упражнений на JavaScript (с ответами) для каждой главы JavaScript.
Попробуйте решить упражнение, отредактировав код, или поcмотреть ответ, чтобы увидеть, что вы сделали не так.
Посмотрите свой счет
Вы получите 1 балл за каждый правильный ответ. Ваш счет и общий счет всегда будут отображаться.
Начать упражнения JavaScript
Если вы не знаете JavaScript, предлагаем вам прочитать Учебник JavaScript с нуля.
Онлайн сертификация Schoolsw3
Идеальное решение для профессионалов, которым необходимо совмещать работу, семью и карьеру.
Уже выдано более 25 000 сертификатов!
HTML Сертификат документирует ваши знания HTML.
CSS Сертификат документирует ваши знания современного CSS.
JavaScript Сертификат документирует ваши знания JavaScript и HTML DOM.
Python Сертификат документирует ваши знания Python.
jQuery Сертификат документирует ваши знания jQuery.
SQL Сертификат документирует ваши знания SQL.
PHP Сертификат документирует ваши знания PHP и MySQL.
XML Сертификат документирует ваши знания XML, XML DOM и XSLT.
Bootstrap Сертификат документирует ваши знания the Bootstrap framework.
Упражнения
Тесты
КАК СДЕЛАТЬ
ПОДЕЛИТЬСЯ
СЕРТИФИКАТЫ
Сообщить об ошибке
Если вы хотите сообщить об ошибке или сделать предложение, не стесняйтесь, присылайте нам электронное письмо:
Ваше предложение:
Спасибо, за вашу помощь!
Ваше сообщение было отправлено в SchoolsW3.
Топ Учебники
Топ Справочники
Топ Примеры
Веб Сертификаты
Практика JavaScript для новичков
Учебник JavaScript
Практика
Работа с DOM
Практика
Некоторые продвинутые вещи
Рекомендованное ES6
Некоторые видео могут забегать вперед, тк к этому месту учебника мы прошли еще не весь ES6. Просто пропускайте такие видео, посмотрите потом.
Регулярки
Разное
Работа с канвасом
Практика
Контекст
Drag-and-Drop
Практика по ООП
Ваша задача: посмотрите, попробуйте повторить.
Практика
Promise ES6
Библиотека jQuery
Тк. jQuery устаревает, объявляю эти уроки не обязательными и выношу в конец учебника (так по уровню уроки середины учебника, если что). В перспективе переедет в отдельный учебник по jq.
Перед решением задач изучите теорию к данному уроку.
Задачи для решения
Даны 3 инпута и кнопка. По нажатию на кнопку получите числа, стоящие в этих инпутах и запишите их сумму в четвертый инпут.
Дан инпут. В него вводится число. По потери фокуса найдите сумму цифр этого числа.
Дан инпут. В него вводятся числа через запятую. По потери фокуса найдите среднее арифметическое этих чисел (сумма делить на количество).
Дан инпут. В него вводится ФИО через пробел. По потери фокуса запишите фамилию, имя и отчество в отдельные инпуты.
Дан инпут. В него вводится ФИО через пробел. ФИО вводится с маленькой буквы. Сделайте так, чтобы по потери фокуса инпутом, введенные фамилия, имя и отчество автоматически стали записанными с большой буквы (в том же инпуте).
Дан инпут. В него вводится текст. По потери фокуса узнайте количество слов в этом тексте.
Дан инпут. В него вводится текст. По потери фокуса узнайте количество символов в самом длинном слове в этом тексте.
Дан инпут. В него вводится дата в формате 31.12.2016. По потери фокуса в этом же инпуте поставьте эту дату в формате 2016-12-31.
Дан инпут. В него вводится год рождения пользователя. По нажатию на кнопку выведите в абзац ниже сколько пользователю лет.
Дан инпут. В него вводится дата в формате 31.12.2016. По потери фокуса узнайте день недели (словом), который приходится на эту дату.
Дан инпут. В него вводится слово. По нажатию на кнопку проверьте то, что это слово читается с начала и с конца одинаково (например, мадам).
Дан инпут. В него вводится число. Проверьте по вводу, что это число содержит внутри себя цифру 3.
Даны N абзацев и кнопка. По нажатию на кнопку запишите в конец каждого абзаца его порядковый номер.
Даны N абзацев с числами. По нажатию на кнопку выведите эти числа в инпут через запятую в порядке возрастания.
Даны ссылки. По загрузке страницы добавьте в конец каждой ссылки ее href в круглых скобках.
Даны ссылки. По загрузке страницы, если ссылка начинается с http://, то добавьте ей в конец стрелку → (делается так: →).
Даны N абзацев с числами. По нажатию на любой абзац запишите в него квадрат числа, которое в нем находится.
Даны картинки. По нажатию на любую картинку увеличьте ее в 2 раза.
Даны N картинок размера 30px. По нажатию на картинку под ними эта картинка появляется размером в 50px.
Дан инпут. Выделите любой текст на странице. По окончанию выделения этот текст должен записаться в этот инпут.
Даны абзацы с числами. По нажатию на кнопку найдите абзац, в котором хранится максимальное число, и сделайте его красного цвета.
Дан инпут. Даны абзацы. Пусть в этот инпут записывается суммарное количество нажатий по этим абзацам.
Дан инпут с числом. Сделайте так, чтобы каждую секунду в нем появлялся квадрат того числа, которое в нем записано.
Дан инпут и кнопка. По нажатию на кнопку сгенерируйте случайную строку из 8-ми символов и запишите в инпут.
Модифицируйте предыдущую задачу так, чтобы был еще один инпут, в котором задается длина случайной строки.
Модифицируйте предыдущую задачу так, чтобы был еще один инпут, в котором задаются символы, из которых формируется эта случайна строка. Символы задаются без всяких разделитетей, в одну строку.
Дан абзац. Сделайте так, чтобы каждую секунду он менял свой цвет с красного на зеленый и наоборот.
Даны инпуты с числами. Произвольное количетсво, пусть три. В первый инпут запишите 1, через секунду во второй инпут запишите 2, еще через секунду в третий инпут 3, потом через секунду в первый инпут запишите 4, во второй 5 и так далее до бесконечности.
Дана ссылка. Дан чекбокс. По нажатию на ссылку меняйте состояние чекбокса с отмеченного на неотмеченное и наоборот.
Даны чекбокс. Дана кнопка. По нажатию на кнопку сделайте все чекбоксы отмеченными.
Спросите у пользователя какой язык (html, css, js, php) он знает с помощью радио кнопочек. Выведите этот язык в абзац.
Спросите у пользователя какие языки (html, css, js, php) он знает с помощью чекбоксов. Выбранные языки должны выводится в абзац ниже через запятую.
Дан инпут. Даны li. В инпут пишется номер. Сделайте так, чтобы по вводу числа, li с заданным номером покрасился в красный цвет.
Дан блок с кнопкой ‘закрыть блок’. По нажатию на эту кнопку блок должен исчезнуть. Кнопка размещается внутри блока и должна исчезнуть вместе с ним. Блоков может быть любое количество, каждый из них закрывает своя кнопка.
В инпут через запятую вводятся страны. По нажатию на кнопку сделайте так, чтобы эти страны записались в ul под инпутом (каждая страна отдельный li).
В инпут вводится страна и нажимается Enter. По нажатию на Enter сделайте так, чтобы введенные страны записывались в абзац под инпутом через запятую. То есть по каждому нажатию Enter в абзац будут добавляться все новые и новые страны.
На странице есть дивы. В них есть текст. Обойдите все дивы и обрежьте тот текст, который в них стоит так, чтобы он стал длиной 10 символов. И добавьте троеточие в конец обрезанного текста
Дана таблица с числами. По нажатию на кнопку найдите ячейку, в которой хранится максимальное число, и сделайте ее фон красным.
Дана таблица с числами. По нажатию на кнопку в инпут под таблицей выведите эти числа через запятую в порядке возрастания.
Дана таблица с числами. По нажатию на кнопку в последний ряд таблицы в каждую ячейку запишите сумму чисел в столбце таблицы, расположенном над определенной ячейкой.
Дана таблица с числами. По нажатию на ячейку она активируется и становится красного цвета. Активировать можно много ячеек. Под таблицей кнопка. По нажатию по этой кнопке в абзац ниже выведите сумма активированных ячеек. Реализуйте кнопку ‘сбросить активированные ячейки’.
Реализуйте раскрывающийся список. По умолчанию есть список стран (ul), по нажатию на страну внутри li со страной появляется список городов.
Сделайте селекты день, мес, год. Сделайте так, чтобы не корректную дату нельзя было выбрать (например, 30 февраля нельзя, а 30 марта можно или 29 февраля можно, но только в високосный год).
Реализуйте генератор таблиц, ширина и высота таблиц задается в двух инпутах (например, таблица 5 на 10 ячеек).
Дан список и кнопка. По нажатию на кнопку посортируйте пункты списка по возрастанию.
Дан ряд ссылок. Сделайте так, чтобы по нажатию на ссылку она становилась с красным фоном. По нажатию на другую ссылку выделение первой ссылки снимается и выделяется та, на которую мы нажали. В абзац ниже пишите текст активной ссылки.
Минипроекты JavaScript для новичков
Учебник JavaScript
Практика
Работа с DOM
Практика
Некоторые продвинутые вещи
Рекомендованное ES6
Некоторые видео могут забегать вперед, тк к этому месту учебника мы прошли еще не весь ES6. Просто пропускайте такие видео, посмотрите потом.
Регулярки
Разное
Работа с канвасом
Практика
Контекст
Drag-and-Drop
Практика по ООП
Ваша задача: посмотрите, попробуйте повторить.
Практика
Promise ES6
Библиотека jQuery
Тк. jQuery устаревает, объявляю эти уроки не обязательными и выношу в конец учебника (так по уровню уроки середины учебника, если что). В перспективе переедет в отдельный учебник по jq.
Перед решением задач изучите теорию к данному уроку.
ВНИМАНИЕ Вместо задач этого урока вышел отдельный спец курс:
http://theory.phphtml.net/courses/javascript/practice/1/c.html
http://theory.phphtml.net/courses/javascript/practice/1/h.html
Меняйте число в адресе, будете попадать на следующий урок, всего 13 уроков (дз есть не везде).
ПЕРЕД этими уроками посмотрите урок на анонимные функции (он ниже по учебнику).
Задачи для решения
Реализуйте калькулятор. Должны быть кнопки цифр и операций. По нажатию на кнопку ‘=’ должен посчитаться результат. Совет: используйте фунцию eval.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Реализуйте игру крестики-нолики. Играет два человека, на одном поле по очереди.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Реализуйте тест, в котором показывается один вопрос, 5 чекбоксов для ответа (может быть несколько правильных ответов). Под чекбоксами ссылка ‘следующий вопрос’. По нажатию на эту ссылку вместо текущего вопроса показывается следующий. Когда вопросы заканчиваются, в последнем вопросе будет стоять ссылка не ‘следующий вопрос’, а ‘показать результат’.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Решите предыдущую задачу, но при условии, что баннер появлятся не по прокрутке, а через N секунд после захода пользователя на страницу.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Реализуйте квадратный календарик (как в винде).
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Реализуйте органайзер. Он представляет собой календарик, нажимая на даты которого можно увидеть список задач, запланированных на этот день.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Реализуйте аккордион (погуглите, что это).
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
Дана таблица. В верхнем ряду th. Сделайте так, чтобы по нажатию на определенный th ряды таблицы сортировались по значениям этого столбца.
Образец того, что должно получится, он же ответ в исходном коде:
Вы можете открыть этот пример в отдельной вкладке браузера.
JavaScript Практика
Избегайте глобальных переменных
Сведите к минимуму использование глобальных переменных.
Сюда входят все типы данных, объекты и функции.
Глобальные переменные и функции могут быть перезаписаны другими скриптами.
Вместо этого используйте локальные переменные и узнайте, как использовать закрытие.
Всегда объявлять локальные переменные
Все переменные, используемые в функции, должны быть объявлены как локальные переменные.
Локальные переменные должны быть объявлены с var ключевым словом или let ключевым словом, иначе они станут глобальными переменными.
Строгий режим не допускает необъявленных переменных.
Объявления сверху
// Объявление в начале
var firstName, lastName, price, discount, fullPrice;
// Использовать позже
firstName = «John»;
lastName = «Doe»;
price = 19.90;
discount = 0.10;
Это также касается переменных цикла:
// Объявление в начале
var i;
// Использовать позже
for (i = 0; i
Инициализировать переменные
Инициализация переменных дает представление о предполагаемом использовании (и предполагаемом типе данных).
Никогда не объявляйте числовые, строковые или логические объекты
Всегда обрабатывайте числа, строки или логические значения как примитивные значения. Не как объекты.
Объявление этих типов как объектов снижает скорость выполнения и вызывает неприятные побочные эффекты:
Пример
Пример
Не использовать new Object()
Пример
Остерегайтесь автоматического преобразования типов
Помните, что числа могут быть случайно преобразованы в строки или NaN (не число).
JavaScript слабо типизирован. Переменная может содержать разные типы данных, а переменная может изменять свой тип данных:
Пример
При выполнении математических операций JavaScript может преобразовывать числа в строки:
Пример
Вычитание строки из строки не приводит к ошибке, но возвращает NaN (не число):
Пример
Используйте === сравнение
Оператор == сравнения всегда преобразуется (в соответствующие типы) перед сравнением.
Оператор === заставляет сравнивать значения и тип:
Пример
0 == «»; // true
1 == «1»; // true
1 == true; // true
0 === «»; // false
1 === «1»; // false
1 === true; // false
Использовать значения параметров по умолчанию
Пример
ECMAScript 2015 позволяет использовать параметры по умолчанию в определении функции:
Узнайте больше о параметрах и аргументах Параметры функции.
Завершите свои переключатели настройками по умолчанию
Пример
Избегайте использования eval()
Функция eval() используется для запуска текст в качестве кода. Практически во всех случаях нет необходимости использовать его.
Поскольку он позволяет запускать произвольный код, он также представляет проблему безопасности.
45 Типсов-Триксов и Практик JavaScript
Одним вечером делать нечего, листая белые страницы интернета, в поисках чего бы такого мне почитать на сон грядущий, наткнулся я на одну занимательную статейку – на неизвестном мне ресурсе, от автора которого знать не знаю, слыхать не слыхал. Чтиво оказалось довольно интересным, с учетом того, что близко по роду деятельности, по форме и ее содержанию.
Правда, не очень во всем согласился с автором непосредственно в излагаемом материале, к тому же много затрагивается базисных вещей, но подумал, что она заслуживает внимания населения – кому вчитываться лень, но любит чтобы кратко, с толком, с расстановкой и по делу без лишней литературщины.
Естественно, что все ниже изложенное отнюдь не есть истина последней инстанции, как на библии, на ней клясться я бы не советовал. Но может быть кто-то откроет какие вещи с новой стороны, а кто – то покритикует, высказав свое ЧСВешное: «Фи фи фи, фа фа фа!».
Однако обо всем по порядку в моем своевольном от лица первого…
Кадр первый, вступительный
Как вы знаете, JavaScript номер один среди прочих языков программирования в мире: это язык для веба, язык для написания мобильных приложений ( прим. – опустил слово hybrid: mobile hybrid apps ) c PhoneGap и Appcelerator, для разработок на серверной стороне c NodeJS и Wakanda, и множества других применений. Это также отправная точка для многих новичков в мир программирования: может использоваться как для вывода простого alert в браузере, так и для управления роботом( с использованием nodebot, nodruino).
Разработчики с отличным знанием JavaScript, которые пишут понятный и производительный код, одни из самых востребованных на рынке труда.
В этой статье мне хотелось бы ознакомить с различными трюками и практиками, которые должны быть известны каждому JavaScript разработчику в независимости от внутренностей браузера ( browser/engine ), а также интерпретатора серверного кода javascript( Server Side JavaScript interpreter ).
Все примеры кода были протестированы в Google Chrome version 30, который
использует V8 JavaScript Engine (V8 3.20.17.15).
Кадр второй, поучительно-советовательный
1 — Не забывайте ключевое слово `var`, когда присваиваете значение переменной
первый раз :
Присвоение не объявленной ранее переменной приведет к тому, что данная переменная будет создана в глобальном пространстве. Избегайте этого.
(прим. — автор намекает, что когда вы создаете переменные, то можете
забыть ключевое слово, соответственно, создадите лишнюю переменную в
глобальном пространстве window)
2 — Используйте `===` вместо `==` :
Применение `==(!=)` производит преобразование типов, если это необходимо. Тогда как `===` не делает такого преобразования. Данный
оператор сравнивает не только значения, но также и типа, что разрешается быстрее, чем `==`. Примеры:
3 — `undefined, null, 0, false, NaN, »` :
Все вышеперечисленное всегда будет ложью в логических выражениях
4 — Не забывайте `;` :
Использование `;` для завершения выражений является хорошей практикой. Вы не будете предупреждены, если пропустите ее, так как JavaScript парсер вставит ее за вас.
5 — Объект через конструктор :
6 — Будьте осторожны, когда используете `typeof, instanceOf, constructor` :
7 — Используйте self-calling функции :
Часто их называют самовызывающимися анонимными функциями (Self-Invoked Anonymous Function) или немедленно вызываемым выражением функции (Immediately Invoked Function Expression (IIFE)). Это функция, которая запускается, непосредственно при создании и имеет следующую форму:
(прим. — в данном пункте было трудно перевести, поэтому оставил оригинальные употребления на языке носителе, как их грамотно перевести
на русский ментальный, увы, не знаю. Думаю автор пытается намекнуть, что таким образом вы скроете свои реализации внутри анонимной функции, которую вызываете непосредственно в момент ее определения)
8 — Получение произвольного значения массива :
9 — Получение произвольного числа в определенном диапазоне :
Данный пример может использован, когда необходимо сгенерировать какие-либо фейковые данные, чтобы протестировать что-нибудь, к примеру, зарплаты, находящиеся между минимальными и максимальным значением:
10 — Генерация численного массива от 0 до max :
11 — Генерация произвольного набора символов :
12 — Перемешивание массива :
13 — Функция `trim()` для строк :
Классическая функция `trim()`, которая есть в Java, C#, PHP и многих других языках программирования, которая удаляет пробельные символы, не содержится в JavaScript. Однако можно добавить ее к объекту `String`:
(прим. — не удержался, но странно, что автор использует данный прием,
как бы `trim()`есть уже в JavaScript)
15 — Преобразовать объект `arguments` в массив :
16 – Проверка является ли заданный аргумент числом :
17 – Проверка является ли заданный аргумент массивом :
Замечание, если метод `toString()` переопределен, то результат будет не такой какой ожидается при использовании данного трюка.
Или воспользоваться…
Вы также можете использовать `instanceof`, если не работаете с множеством фреймов. Однако, если вы используете много контекстов, то
получите неправильный результат:
18 – Получить максимальное, минимальное значение численного массива :
19 – Делаем массив пустым :
20 – Не используйте `delete` для того, чтобы удалить из массива :
Используйте `split` вместо `delete`, чтобы удалить запись из массива. Использование `delete` не удаляет, а заменяет элемент на `undefined`.
Вместо этого…
Используйте вот это…
Однако `delete` следует использовать для удаления свойств объекта.
21 – Урезаем массив, используя `length` :
Как в предыдущем примере с пустым массивом, для урезания массива воспользуемся свойством `length`:
Бонус, если установить значение длины массив больше его текущей, то длина массива будет изменена, а новые значения будут установлены
как `undefined`. Свойство длины массива не только для того, чтобы его считывать.
22 – Использование логических `AND/ OR` для условных выражений :
Логическое `OR` может быть также использовано, чтобы установить значение по умолчанию для аргумента функции.
23 – Используйте `map()`метод, чтобы пройти циклом по массиву :
24 – Округление числа до N чисел после запятой :
25 – Проблема плавающих точек :
26 – Проверяйте свойства объекта, когда пользуетесь `for-in` циклом :
Данный пример кода может быть использован, чтобы избежать итераций по свойствам прототипа объекта.
27 – Оператор запятая :
28 – Кешируйте переменные, которые необходимы для вычислений или запросов :
На примере jQuery селекторов, мы можем закешировать их результат — DOM элементы.
29 – Проверьте аргумент прежде, чем отправить его в isFinite()` :
30 – Избегайте отрицательных индексов в массивах :
Убедитесь, что аргументы передаваемые `indexOf` не отрицательны.
31 – Сериализация и десериализация (для JSON) :
32 – Избегайте `eval()` или `Function` конструктора :
Использование `eval` или `Function` конструктора дорогостоящая операция так как каждый раз они вызывают преобразование исходного кода в исполняемый движком javascript.
33 – Избегайте `with` (Хорошая штука) :
Использование `with` определяет переменную в глобальное пространство. Если какая-либо переменная будет иметь такое же имя, тогда это создаст определенные проблемы, так как может произойти затирание значения.
34 – Избегайте `for-in` циклов для массивов :
Вместо…
Бонус, присвоение для `i` и `len` будет произведено лишь однажды так как это первое выражение конструкции цикла. Это быстрее, чем …
Почему? Длина массива `arrayNumbers` вычисляется при каждой итерации цикла.
35 – Передавайте функции, а не строки для `setTimeout()` и `setInterval()` :
Если вы передаете строки в `setTimeout()` или `setInterval()`, то они будут обрабатываться также как и с использованием `eval`, это медленно.
36 – Используйте `switch/case` вместо серии из `if/else` :
Использование `switch/case` работает быстро, когда более двух условий, это более элегантно и лучше для организации кода. Избейгате этого
выражения, когда имеется более 10 условных выражений.
37 – Используйте `switch/case` выражение с численными диапазонами :
Использование `switch/case` выражения с численным диапазоном делает возможным следующий трюк.
38 – Создать объект, чей прототип — это задаваемый объект :
Возможно создать функцию, что создает объект, чьим прототипом будет является объект, который передается в аргументе функции…
40 – Избегайте использования `try-catch-finally` внутри циклов :
`try-catch-finally` создает новую переменную в текущем пространстве выполнения каждый раз, когда срабатывает исключение и оно связывается с переменной.
41 – Устанавливайте задержки для `XMLHttpRequests` :
Вы можете потерять соединение, если XHR занимает слишком большое время (как пример, сетевые проблемы), используйте `setTimeout()` с вызовами
XHR.
Как бонус, вам следует избегать синхронных запросов Ajax.
42 – Deal with WebSocket timeout
Обычно, когда соединение установлено, сервер может сбросить соединение по тайм-ауту после 30 секунд неактивности. Фаервол может также после определенного периода сбросить соединение по тайм-ауту из-за неактивности.
Данную проблему можно решить путем посылок пустых сообщений серверу. Чтоб сделать это, следует добавить две функции в ваш код: одна, чтобы поддерживать соединение и другая, чтобы отменить эту поддержку.
Используя данный трюк, вы будете управлять тайм-аутом.
`keepAlive()` следует добавить в конец `onOpen()` метода для webSocket
соединения и `cancelKeepAlive()` в конец `onClose()` метода.
Для примера, вместо этого…
44 – Не забывайте пользоваться инструментами по форматированию и стилистике кода.
Используйте JSLint и минимизацию (JSMin, для примера) перед тем, как код начнет жить.
Заключение
Естественно, есть множество советов и трюков и практик. Поэтому, если вам есть, что добавить, получить какую-то обратную связь или внести корректировки — пишите в комментариях.
Ссылочки
А вот и сказочке конец.
Каждый по-разному может относиться к тому, что написано и изложено в этом материале. Достаточно он был хорош или нет, насколько глубоко раскрыты были вопросы, освещены результаты, насколько умны и интересны были примеры.
Моя задача, как транслятора, была в том, чтобы доставить его на суд говорящей, кипящей от работы синапсов общественности. А уж зачем ему конкретно это надо — каждый решает за себя.
Кто захочет поговорить с автором, почитать комментарии — пройдите по ссылочкам. Пробегитесь по оригинальной статье. Надеюсь, что моя скромная копия принесла вам пользы, не отняла много времени.
Спасибо за внимание!
Оригинал текста
Автор оригинального текста: Саад Муслики (Смотреть героя)
*Декабрь 23, 2013*