Примеры javascript уроки для начинающих. Как изучить JavaScript быстрее. Вызов функции с использованием метода apply()

Всем привет! В этой статье мы рассмотрим 6 советов по изучению JavaScript, которые помогут вам освоить его быстрее .

Когда люди пытаются изучить JavaScript или какое-нибудь другое умение, они часто сталкиваются с одними и теми же проблемами.

  • Некоторые моменты могут сбивать с толку, особенно, если вы пришли с другого языка программирования
  • Трудно найти время(и, иногда, мотивацию) для изучения
  • Когда вы что-то поняли, это легко забыть
  • Инструменты меняются так быстро, что непонятно, с чего начать

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

1. Не позволяйте будущим решениям останавливать вас от развития сейчас

Многие начинающие изучать JavaScript задаются вопросом, какой фреймворк начать использовать. Но, если вы еще плохо знаете чистый JavaScript , то это неправильно задавать такой вопрос. Вы будете тратить все свое время на поиски различных фреймворков, а не двигаться вперед в своем развитии.

Один из способов решения этой проблемы – это иметь список того, чему вы должны научиться. Например, чтобы стать фронт-енд разработчиком, ваш список должен выглядеть так:

  • HTML
  • JavaScript
  • немного JQuery
  • Возможно, какой-нибудь фреймворк
  • Основы GitHub
  • Немного WordPress
  • Хостинг

Изучив все это, вы сможете создать функциональную страничку только с помощью html и css . Имея такой список, вам будет легче понять, что нужно изучать сейчас, и не тратить время на то, что следует изучать позже.

2. Не позволяйте себе забывать то, что уже изучили

Изучение чего-то слишком быстро может стать одной из самых разрушительных вещей в вашем изучении JavaScript . Позвольте мне объяснить.

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

К счастью, есть несколько простых шагов для решения этой проблемы:

  • Ограничьте количество материала, которое вы изучаете за раз
  • Практикуйтесь – пишите код

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

3. Подходите к практике правильно

Многие люди считают практику скучной, поэтому они стараются пропускать ее или сократить. Если вы будете так делать, то вам придется изучать JavaScript намного дольше. Но как сделать практику веселой, чтобы вам захотелось заниматься этим?

Попробуйте следующее:

Что, если вы изучили новую тему по JavaScript , но не попрактиковались? Как вы будете себя чувствовать? Лично я был бы расстроен. Это выглядит так же, как если бы ребенку купили новую игрушку, но не разрешили бы поиграть с ней.

Когда вы изучаете что-то в JavaScript , представляйте, что вы играете с новой игрушкой, автомобилем, парой ботинок или чем-либо еще, что вам нравится.

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

4. Найдите время для программирования, используя Facebook трюк

Одна из самых частых проблем, которая есть у людей, это то, что они не могут найти время для программирования, но те же люди очень часто проводят время на таких сайтах, как Facebook , YouTube , Wikipedia или Reddit . Не важно, относится это к вам или нет, вы все равно найдете, чему здесь поучиться.

У меня действительно было время, когда я только и хотел, что сидеть в Facebook , но я не проводил там часы. Как так получилось? А получилось это потому, что я и не собирался оставаться там долго. Начать работать над чем-то – это самая тяжелая часть, поэтому, сохраняя первоначальное обязательство, мне кажется это сделать проще. Если бы кто-то спросил меня, готов ли я проводить часы в Facebook , я бы ответил нет, потому что у меня нет времени на это. Мне больше нравится заходить туда, чтобы что-то проверить по-быстрому, и только.

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

5. Думайте медленнее и вы будете изучать быстрее

Это противоречит здравому смыслу, поэтому я объясню это историей.

Мой друг однажды был смущен по поводу одной особенности JavaScript . Я попросил его рассказать мне, что он знает, а затем объяснить, какая часть из этого ему не понятна. Как только он пошел по коду, я понял, что он торопится.

"Подожди!" – сказал я ему. "Не торопись и расскажи мне каждый шаг этого кода".

Мой друг продолжил говорить мне о коде в общем.

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

На этот раз мой друг рассказал о коде намного лучше. Суть в том, что он нашел время на то, чтобы рассмотреть и понять каждую строчку кода, вместо того, чтобы пытаться понять, что здесь происходит, тотчас.

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

6. Пишите сложный код простым языком

Если кусок кода кажется сложным или незнакомым, напишите его сначала на простом языке. Таким образом, вы сможете выяснить, что вы хотите, чтобы код делал, перед тем, как вы его напишите. Вот два преимущества такого подхода:

  • Ваш код будет легче и быстрее написать, потому что вам не придется периодически останавливаться, чтобы обдумать, как вы хотите, чтобы он себя вел
  • Вы найдете ошибки перед тем, как они произойдут, потому что у вас будет четкое представление, что следует делать коду

Заключение

Мы рассмотрели кучу способов, которые помогут вам изучить JavaScript быстрее, но вы можете применить их и для других умений. Вот краткое содержание того, что мы рассмотрели:

  • Перестаньте беспокоиться о будущих решениях и погрузитесь в изучение сейчас
  • Сделайте практику веселой, представляя новые умения, как новые игрушки
  • Найдите время для программирования так же, как вы находите его на соц. сети
  • Не торопитесь, делайте все постепенно, и вы будете учиться быстрее

А как вы относитесь к изучению? У вас есть какие-нибудь советы и приемы, которые не были рассмотрены в этой статье? Или, может быть, вы думаете, что это все ерунда и единственно правильный путь – это сидеть за изучением 12 часов в сутки. В любом случае, я бы хотел услышать ваше мнение в комментариях.

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

JavaScript сейчас доминирует в мире IT. С его помощью вы можете как создать маленькое веб-приложение, так и запрограммировать робота. К счастью, язык существует уже довольно давно, и овладевшие им в превосходстве разработчики описали свой опыт программирования на нём в книгах.

Эта книга рассказывает, как заставить компьютеры делать то, что вам от них нужно. Компьютеры сегодня так же распространены, как отвёртки - но содержат гораздо больше скрытых сложностей, и поэтому их сложнее понять и с ними сложнее работать. Для многих они остаются чуждыми, слегка угрожающими штуками. Также книга доступна на русском языке.

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

Эта книга посвящена рассмотрению как классических, так и современных шаблонов программирования на JavaScript. В целом ориентирована на начинающих программистов.

HTML5 даёт великолепные возможности. Как и jQuery. Как и Node.JS. Если добавить к ним ещё немного чистого JavaScript - вы запросто покорите веб.

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

Эта книга даст вам универсальные знания о JavaScript, понимание как его общей логики, так и деталей. Автор предполагает, что читатель уже знаком с принципами объектно-ориентированного программирования и каким-либо языком вроде PHP, Ruby, Python, C++ или Java.

Вы готовы сделать шаг вперед в своей практике веб-программирования и перейти от верстки в HTML и CSS к созданию полноценных динамических страниц? Тогда пришло время познакомиться с самым «горячим» языком программирования - JavaScript!

Прочитав эту книгу, вы узнаете все о языке JavaScript: от переменных до циклов. Вы поймете, почему разные браузеры по-разному реагируют на код и как написать универсальный код, поддерживаемый всеми браузерами. Вы поймете, почему JS - это будущее, и станете настоящим фронтенд-разработчиком.

В этой книге показано, как писать на JS фронтенд приложений, не используя никаких третьесторонних фреймворков или библиотек.

Кроме общего знания принципов JavaScript, эта книга подарит вам также знания из смежных областей, вроде JSON или NoSQL, а так же понимание того, как вообще пишутся веб-приложения.

Как понятно из названия, эта книга посвящена разработке одностраничных приложений. В ней нет описания конкретных технологий и фреймворков, но зато неплохо описаны общие шаблоны и практики.

Книга посвящена работе с DOM (Document Object Model) - пожалуй, самому важному в JavaScript для всех веб-разработчиков.

Эта книга, написанная Дугласом Крокфордом, создателем JSON и JSLint, является классикой мира JavaScript, и прочитать её должен каждый. В ней рассказывается об основах объектно-ориентированного подхода и приводится множество примеров, как хороших, так и плохих. Разумеется, автор рассказывает, как исправлять такие «вредные» примеры и как не допускать подобных ошибок.

Эта серия, написанная известным преподавателем Кайлом Симпсоном, состоит из 6 книг, каждая из которых покрывает отдельный раздел языка. Главным преимуществом этих книг является то, что они достаточно короткие, благодаря чему вы не успеете отвлечься. А книгу «ES6 и не только» из этой серии вы можете приобрести в бумажном варианте на русском языке.

JavaScript - это главный инструмент веб-разработчиков, позволяющий делать интернет-страницы интерактивными, динамичными и достичь наивысшей производительности. Это отлично структурированное руководство по JavaScript, которое позволит быстро изучить этот не самый простой в освоении, но очень востребованный язык. Большое внимание в книге уделено библиотеке jQuery. Присутствуют также много примеров и подробно разобранных заданий.

Прочитав «Исчерпывающее руководство» вы сможете:

  • Сделать страницы своего сайта интерактивными.
  • Освоить последнюю версию плагина jQuery UI.
  • Создавать удобные формы с автоматической валидацией и исправлением данных.
  • Применять технологию AJAX.
  • Углубить свои знания в области и стать профессионалом.

После изучения основ верстки вам непременно захочется большей интерактивности и красоты, а также более удобных способов взаимодействия сайта с бэкендом. Тогда-то на арену и выходит JavaScript вместе с безумно популярным фреймворком jQuery. Для начала работы с книгой от вас не требуется никаких глубоких знаний – все их вы получите именно из нее. Здесь демонстрируются только новейшие практики в области кроссбраузерности и оптимизации страниц, а изложение ведется понятным языком с наглядными примерами и иллюстрациями.

  • Перевод

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

Примитивные типы данных

В JavaScript имеются следующие примитивные типы данных: number , boolean , string , undefined , null . Сразу нужно отметить, что, при работе с примитивными типами данных, например, со строковыми литералами, мы, даже не проводя явного преобразования, сможем обращаться к их методам и свойствам. Дело тут в том, что при попытке выполнения подобных операций литералы автоматически оснащаются соответствующей объектной обёрткой.

▍Числа

В JavaScript имеется лишь один тип чисел - это числа двойной точности с плавающей запятой. Это ведёт к тому, что результаты вычисления некоторых выражений арифметически неверны. Возможно, вы уже знаете, что в JS значение выражения 0.1 + 0.2 не равно 0.3 . В то же время, при работе с целыми числами таких проблем не наблюдается, то есть, 1 + 2 === 3 .

В JavaScript имеется объект Number , представляющий собой объектную обёртку для числовых значений. Объекты типа Number можно создавать либо используя команду вида var a = new Number(10) , либо можно полагаться на автоматическое поведение системы, описанное выше. Это, в частности, позволяет вызывать методы, хранящиеся в Number.prototype в применении к числовым литералам:

(123).toString(); //"123" (1.23).toFixed(1); //"1.2"
Существуют глобальные функции, предназначенные для преобразования значений других типов в числовой тип. Это - parseInt() , parseFloat() и конструкция Number() , которая в данном случае выступает в виде обычной функции, выполняющей преобразование типов:

ParseInt("1") //1 parseInt("text") //NaN parseFloat("1.234") //1.234 Number("1") //1 Number("1.234") //1.234
Если в ходе операции с числами получается нечто, не являющееся числом (в ходе неких вычислений, или при попытке преобразования чего-либо в число), JavaScript не выдаст ошибку, а представит результат подобной операции в виде значения NaN (Not-a-Number, не число). Для того, чтобы проверить, является ли некое значение NaN , можно воспользоваться функцией isNaN() .

Арифметические операции JS работают вполне привычным образом, но надо обратить внимание на то, что оператор + может выполнять и сложение чисел, и конкатенацию строк.

1 + 1 //2 "1" + "1" //"11" 1 + "1" //"11"

▍Строки

Строки в JavaScript представляют собой последовательности символов Unicode. Строковые литералы создают, заключая текст, который нужно в них поместить, в двойные ("") или одинарные ("") кавычки. Как уже было сказано, при работе со строковыми литералами мы можем полагаться на соответствующую объектную обёртку, в прототипе которой имеется множество полезных методов, среди них - substring() , indexOf() , concat() .

"text".substring(1,3) //ex "text".indexOf("x") //2 "text".concat(" end") //text end
Строки, как и другие примитивные значения, иммутабельны. Например, метод concat() не модифицирует существующую строку, а создаёт новую.

▍Логические значения

Логический тип данных в JS представлен двумя значениями - true и false . Язык может автоматически преобразовывать различные значения к логическому типу данных. Так, ложными, помимо логического значения false , являются значения null , undefined , "" (пустая строка), 0 и NaN . Всё остальное, включая любые объекты, представляет собой истинные значения. В ходе выполнения логических операций всё, что считается истинным, преобразуется к true , а всё, что считается ложным, преобразуется к false . Взгляните на следующий пример. В соответствии с вышеизложенными принципами пустая строка будет преобразована к false и в результате выполнения этого кода в консоль попадёт строка This is false .

Let text = ""; if(text) { console.log("This is true"); } else { console.log("This is false"); }

Объекты

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

Объекты проще всего создавать, используя синтаксис объектных литералов:

Let obj = { message: "A message", doSomething: function() {} }
Свойства объекта можно, в любое время, читать, добавлять, редактировать и удалять. Вот как это делается:

  • Чтение свойств: object.name, object .
  • Запись данных в свойства (если свойство, к которому обращаются, не существует, добавляется новое свойство с указанным ключом): object.name = value , object = value .
  • Удаление свойств: delete object.name , delete object .
Вот несколько примеров:

Let obj = {}; // создание пустого объекта obj.message = "A message"; // добавление нового свойства obj.message = "A new message"; // редактирование свойства delete object.message; // удаление свойства
Объекты в языке реализованы в виде хэш-таблиц. Простую хэш-таблицу можно создать, используя команду Object.create(null) :

Let french = Object.create(null); french["yes"] = "oui"; french["no"] = "non"; french["yes"];//"oui"
Если объект нужно сделать иммутабельным, можно воспользоваться командой Object.freeze() .

Для перебора всех свойств объекта можно воспользоваться командой Object.keys() :

Function logProperty(name){ console.log(name); //имя свойства console.log(obj); // значение свойства } Object.keys(obj).forEach(logProperty);

▍Сравнение значений примитивных типов и объектов

При практической работе с примитивными значениями можно, как уже было сказано, воспринимать их как объекты, у которых есть свойства и методы, хотя объектами они не являются. Примитивные значения иммутабельны, внутренняя структура объектов может меняться.

Переменные

В JavaScript переменные можно объявлять, используя ключевые слова var , let и const .

При использовании ключевого слова var можно объявить переменную, и, если надо - инициализировать её неким значением. Если переменная не инициализирована, её значением является undefined . Переменные, объявленные с использованием ключевого слова var , имеют функциональную область видимости.

Ключевое слово let очень похоже на var , разница заключается в том, что переменные, объявленные с ключевым словом let , имеют блочную область видимости.

Блочную область видимости имеют и переменные объявленные с помощью ключевого слова const , которые, учитывая то, что значения подобных переменных нельзя изменять, правильнее будет называть «константами». Ключевое слово const , которое «замораживает» значение переменной, объявленной с его использованием, можно сравнить с методом Object.freeze() , «замораживающим» объекты.

Если переменная объявлена за пределами какой-либо функции, её область видимости является глобальной.

Массивы

Массивы в JavaScript реализованы с использованием объектов. Как результат, говоря о массивах, мы, фактически, обсуждаем объекты, похожие на массивы. Работать с элементами массива можно, используя их индексы. Числовые индексы преобразуются в строки и используются как имена для доступа к значениям элементов массивов. Например, конструкция вида arr аналогична конструкции вида arr["1"] , и та и другая дадут доступ к одному и тому же значению: arr === arr["1"] . В соответствии с вышесказанным, простой массив, объявленный командой let arr = ["A", "B", "C"] , представляется в виде объекта примерно следующего вида:

{ "0": "A", "1": "B", "2": "C" }
Удаление элементов массива с использованием команды delete оставляет в нём «дыры». Для того чтобы избежать этой проблемы, можно использовать команду splice() , но работает она медленно, так как, после удаления элемента, перемещает оставшиеся элементы массива, фактически, сдвигая их к началу массива, влево.

Let arr = ["A", "B", "C"]; delete arr; console.log(arr); // ["A", empty, "C"] console.log(arr.length); // 3
Методы массивов позволяют легко реализовывать такие структуры данных, как стеки и очереди:

// стек let stack = ; stack.push(1); // stack.push(2); // let last = stack.pop(); // console.log(last); // 2 // очередь let queue = ; queue.push(1); // queue.push(2); // let first = queue.shift();// console.log(first); // 1

Функции

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

Существует три способа объявления функций:

  • Классическое объявление функции (Function Declaration или Function Statement).
  • Использование функциональных выражений (Function Expression), которые ещё называют функциональными литералами (Function Literal).
  • Использование синтаксиса стрелочных функций (Arrow Function).

▍Классическое объявление функции

При таком подходе к объявлению функций действуют следующие правила:
  • Первым ключевым словом в строке объявления функции является function .
  • Функции необходимо назначить имя.
  • Функцию можно использовать в коде, находящимся до её объявления благодаря механизму подъёма объявления функции в верхнюю часть области видимости, в которой она объявлена.
Вот как выглядит классическое объявление функции:

Function doSomething(){}

▍Функциональные выражения

При использовании функциональных выражений нужно учитывать следующее:
  • Ключевое слово function уже не является первым словом в строке объявления функции.
  • Наличие имени у функции необязательно. Возможно применение как анонимных, так и именованных функциональных выражений.
  • Команды вызова таких функций должны следовать за командами их объявления.
  • Такую функцию можно запустить сразу же после объявления, воспользовавшись синтаксисом IIFE (Immediately Invoked Function Expression - немедленно вызываемое функциональное выражение).
Функциональное выражение выглядит так:

Let doSomething = function() {}

▍Стрелочные функции

Стрелочные функции, по сути, можно считать «синтаксическим сахаром» для создания анонимных функциональных выражений. Надо отметить, что у таких функций нет собственных сущностей this и arguments . Объявление стрелочной функции выглядит так:

Let doSomething = () = > {};

▍Способы вызова функций

Функции можно вызывать различными способами.

Обычный вызов функции

doSomething(arguments)

Вызов функции в виде метода объекта

theObject.doSomething(arguments) theObject["doSomething"](arguments)

Вызов функции в виде конструктора

new doSomething(arguments)

Вызов функции с использованием метода apply()

doSomething.apply(theObject, ) doSomething.call(theObject, arguments)

Вызов функции с использованием метода bind()

let doSomethingWithObject = doSomething.bind(theObject); doSomethingWithObject();
Функции можно вызывать с большим или меньшим количеством аргументов, чем то количество параметров, которое было задано при их объявлении. В ходе работы функции «лишние» аргументы будут просто проигнорированы (хотя у функции будет доступ к ним), отсутствующие параметры получат значение undefined .

У функций есть два псевдо-параметра: this и arguments .

▍Ключевое слово this

Ключевое слово this представляет собой контекст функции. Значение, на которое оно указывает, зависит от того, как была вызвана функция. Вот какие значения принимает ключевое слово this в зависимости от способа вызова функции (они, с примерами кода, конструкции из которых используются здесь, описаны выше):
  • Обычный вызов функции - window / undefined .
  • Вызов функции в виде метода объекта - theObject .
  • Вызов функции в виде конструктора - новый объект.
  • Вызов функции с использованием метода apply() - theObject .
  • Вызов функции с использованием метода bind() - theObject .

▍Ключевое слово arguments

Ключевое слово arguments - это псевдопараметр, который даёт доступ ко всем аргументам, использованным при вызове функции. Он похож на массив, но массивом не является. В частности, у него нет методов массива.

Function reduceToSum(total, value){ return total + value; } function sum(){ let args = Array.prototype.slice.call(arguments); return args.reduce(reduceToSum, 0); } sum(1,2,3);
Альтернативой ключевому слову arguments является новый синтаксис оставшихся параметров. В следующем примере args - это массив, содержащий всё, что передано функции при вызове.

Function sum(...args){ return args.reduce(reduceToSum, 0); }

▍Оператор return

Функция, в которой отсутствует выражение return , возвратит undefined . Используя ключевое слово return , обращайте внимание на то, как работает механизм автоматической вставки точки с запятой. Например, следующая функция вернёт не пустой объект, а значение undefined:

Function getObject(){ return { } } getObject()
Для того чтобы избежать подобной проблемы, открывающую фигурную скобку нужно расположить на той же строке, на которой находится оператор return:

Function getObject(){ return { } }

Динамическая типизация

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

Function log(value){ console.log(value); } log(1); log("text"); log({message: "text"});
Для выяснения типа данных, хранящихся в переменной, можно использовать оператор typeof() :

Let n = 1; typeof(n); //number let s = "text"; typeof(s); //string let fn = function() {}; typeof(fn); //function

Однопоточная модель выполнения

Среда выполнения JavaScript является однопоточной. Это, в частности, выражается в невозможности одновременного выполнения двух функций (если не учитывать возможности асинхронного выполнения кода, которые мы тут не затрагиваем). В среде выполнения имеется так называемая очередь событий (Event Queue), хранящая список заданий, которые нужно обработать. Как результат, для однопоточной схемы выполнения JS несвойственна проблема взаимных блокировок ресурсов, поэтому тут не нужен механизм блокировок. Однако, код, попадающий в очередь событий, должен выполняться быстро. Если перегрузить тяжёлой работой, в браузерном приложении, главный поток, страница приложения не будет реагировать на воздействия пользователя и браузер предложит закрыть эту страницу.

Обработка исключений

В JavaScript имеется механизм для обработки исключений. Работает он по вполне обычному для подобных механизмов принципу: код, который может вызвать ошибку, оформляют с использованием конструкции try/catch . Сам код находится в блоке try , ошибки обрабатываются в блоке catch .

Интересно отметить, что иногда JavaScript, при возникновении внештатных ситуаций, не выдаёт сообщений об ошибках. Это связано с тем фактом, что JS не выбрасывал ошибки до принятия стандарта ECMAScript 3.

Например, в следующем фрагменте кода попытка изменения «замороженного» объекта завершится неудачно, но исключение выдано не будет.

Let obj = Object.freeze({}); obj.message = "text";
Некоторые из «молчаливых» ошибок JS проявляются в строгом режиме, включить его можно, воспользовавшись конструкцией "use strict"; .

Система прототипов

В основе таких механизмов JS, как функции-конструкторы, команда Object.create() , ключевое слово class , лежит система прототипов.
Рассмотрим следующий пример:

Let service = { doSomething: function() {} } let specializedService = Object.create(service); console.log(specializedService.__proto__ === service); //true
Здесь, для создания объекта specializedService , прототипом которого нужно было сделать объект service , использована команда Object.create() . В результате оказывается, что метод doSomething() можно вызвать, обратившись к объекту specializedService . Кроме того, это означает, что свойство __proto__ объекта specializedService указывает на объект service .

Создадим теперь похожий объект с использованием ключевого слова class:

Class Service { doSomething(){} } class SpecializedService extends Service { } let specializedService = new SpecializedService(); console.log(specializedService.__proto__ === SpecializedService.prototype);
Методы, объявленные в классе Service , будут добавлены в объект Service.prototype . Экземпляры класса Service будут иметь тот же прототип (Service.prototype). Все экземпляры будут делегировать вызовы методов к объекту Service.prototype . В результате оказывается, что методы объявляются лишь один раз, в Service.prototype , после чего «наследуются» всеми экземплярами класса.

▍Цепочка прототипов

Объекты могут быть «наследниками» других объектов. У каждого объекта есть прототип, методы которого ему доступны. Если попытаться обратиться к свойству, которого нет в самом объекте, JavaScript приступит к его поиску в цепочке прототипов. Этот процесс будет продолжаться до тех пор, пока свойство не будет найдено, или пока поиск не достигнет конца цепочки.

О функциональном программировании в JavaScript

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

Замыкание - это внутренняя функция, у которой есть доступ к переменным, объявленным внутри родительской функции, даже после выполнения родительской функции.

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

Функциональное программирование в JS освещается во множестве публикаций. Если вам это интересно - вот несколько материалов на данную тему, посвящённых

Рассказ программиста о том, как добиться успехов в изучении JavaScript.

JavaScript – язык, на котором сегодня работает всё – от веб-приложений до мобильных приложений и серверов. Его популярность резко выросла за последние несколько лет, обойдя такие языки, как Java и PHP. Сейчас – наилучшее время для изучения JavaScript. Я расскажу, с чего началась моя история, что я изучил и как стать профессионалом в JavaScript.

Предыстория

JavaScript был создан Бренданом Эйхом в 1995 году. Брендан был принят в компанию Netscape Communication, задачей которой было сделать веб более динамичным. Через 10 дней, Брендан создал прототип языка, с синтаксисом, очень похожим на Java. Это был день рождения JavaScript.

Сегодня каждый браузер поддерживает его, тем самым делая JavaScript языком веба.

Некоторые разработчики ненавидят JavaScript за то, что он интерпретирует код таким образом, что в итоге вы получаете совсем не то, что программировали. Написав первые несколько строк на JavaScript, я был удивлён этим фактом. Тем не менее я твёрдо решил, что займусь его изучением.

Первые шаги

После моего первого знакомства с JavaScript, я решил составить план изучения языка:

1. Научиться учиться и запоминать простые вещи

2. Изучить основы JavaScript

3. Погрузиться в изучение и приступить к изучению расширенных возможностей языка.

4. Начать создание своих проектов.

5. Завести блог об изучении JavaScript

6. Научить других

Этот план я называю никогданекончающимся, что несложно заметить, взглянув на него. Я буду выполнять пункт за пунктом, но сначала я хотел бы вас предостеречь. Прежде чем приступить к изучению, вы должны понимать, что путь тернист. В какой-то момент вы придёте в отчаяние, главное не поддаваться ему, а продолжать работать. С этим сталкивались все, даже профессионалы. Эту часть обучения, нужно принять как должную.

Прежде чем приступить к изучению, вы должны понимать, что путь тернист. В какой-то момент вы придёте в отчаяние, главное не поддаваться ему, а продолжать работать.

Учитесь учиться

Очень часто многие умалчивают, что способность учиться самостоятельно, то есть заниматься самообразованием, тоже нужно развивать. План является основой самообразования. В IT всё меняется настолько быстро, что чтобы оставаться успешным нужно постоянно развиваться. Ниже я привёл несколько идей, как это осуществить.

Написание технических текстов как способ обучения

В процессе обучения я записывал все свои достижения. Сделать это можно создав блог или любым другим удобным для вас способом. Если же публиковать свои достижения вы не считаете нужным, ведите записи на своём ПК. Результаты будут видны практически сразу, кроме того, способ помогает тренировать память. Это способствует пониманию пройденного.

Тесты на знание

Этот способ является одним из наиболее быстрых. Несмотря на то, что зачастую многие выступают против тестов, как способа проверки знаний, это действительно помогает в самообразовании.

Лучшим способом является использование карточек. Я использую Anki . В приложении можно создавать карточки по каждой пройденной теме. Выполнять тесты желательно регулярно, поэтому каждое утро я посвящаю 10-15 минут на их выполнение. Это помогает не только развивать память, но и запоминать, как правильно задавать вопросы.

Не торопитесь

Наихудшее время для обучения – когда вы чувствуете усталость. В такие моменты, главное не заставлять себя. Сделайте перерыв на несколько дней, когда будете готовы продолжайте обучение. Кроме того, я настоятельно рекомендую использовать метод помидора . Суть в том, чтобы 25 минут заниматься, и 5 минут отдыхать. Этот способ помогает повысить продуктивность.

Найдите ментора

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

Основы JavaScript

Теперь, когда мы познакомились с наиболее эффективными способами обучения пришло время перейти к самому обучению. Всё надо начинать с основ. Благодаря популярности JavaScript, найти информацию в интернете не составит труда. Я поделюсь ресурсами, где я сам обучался. Вы можете выбрать любой из них:

MDN’s JavaScript Guide — руководство охватывает всё необходимое, грамматику и типы, циклы, функции, выражения, числа и даты, форматирование и многое другое.

You Don’t Know JS — это серия книг Кайла Симпсона. Здесь содержится информация, которая поможет вам изучить язык более глубоко.

Eloquent JavaScript — ещё одна крутая книга о JavaScript. Советую читать её, только после того, как вы получите базовые знания или если у вас есть опыт программирования на других языках.

Free Code Camp — сообщество программистов, где вы будете участвовать в чемпионатах, создавать проекты и получать сертификаты. Способ подойдёт даже новичку, кроме того его можно совмещать с занятиями на других ресурсах.

CodeCademy — ещё одна платформа для обучения с помощью задач. Идеально для новичка.

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

Если вы чувствуете, что не можете самостоятельно справиться с проблемой, погуглите, обратитесь на форум Stack Overflow или просто спросите у ваших знакомых программистов. Всегда спрашивайте себя, для чего вы делаете что-то – «Для чего мне нужны циклы, когда проще использовать метод карт?», «Зачем мне JQuery, если можно обойтись без него?».

«Я знаю основы, что дальше?»

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

Справиться со стрессом мне помогла моя сила воли. Я понимал, что это поможет мне перейти на новый уровень.

Изучение новых вещей становится затруднительным, так как материал уже не такой лёгкий как прежде, но всё еще не настолько тяжёлый, чтобы бросать дело. Я занялся тестирования, шаблонов проектирования, структур JavaScript с помощью книг. Не все из тех книг, что я прочёл, помогли мне. Здесь я приведу список тех, что действительно оказались полезными:

Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript — в книге описываются 68 подходов для написания кода, к каждому автор приводит примеры. Вы узнаете, как подбирать стиль программирования для разных проектов, решать проблемы и многие другие аспекты программирования.

JavaScript — The Good Parts — несмотря на то, что книга порядком устарела, она всё ещё является отличным помощником. Книга научит вас писать красивый и эффективный код.

— в книге рассказывается о том, как применять современные шаблоны к языку. Написано всё простым языком.

Test-Driven JavaScript Development — одна из лучших книг, обучающих тестированию кода JavaScript.

Путь к профессии

Несмотря на то, что книги дают значительный объем знаний, нужно уметь применять их на практике.

Человека нельзя назвать кузнецом своего дела, если он знает всё, но ничего не умеет. То же самое с программированием. Если вы не практикуетесь, вы ничего не получите. Так что мой совет – учитесь и практикуйтесь одновременно. Не стоит волноваться по поводу того, что ваш код не будет идеальным. Главное – практика. Создайте аккаунт на GitHub , пишите код ежедневно, сделайте это одним из пунктов распорядка дня. Когда вы создадите свой проект, поделитесь с сообществом и ждите отзывов. Обратная связь, особенно если это мнение аргументированно, дорогого стоит. В процессе работы над проектом, вы приобретёте навыки, которые помогут вам не только в программировании, но и в других делах.

Человека нельзя назвать кузнецом своего дела, если он знает всё, но ничего не умеет.

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

Не переставайте учиться

Теперь, когда вы обладаете солидным набором знаний и умений, время перейти к следующей проблеме – как оставаться на плаву. Поток информации бесконечен. Чтобы быть в курсе, я подписался на несколько изданий –

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

Что я изучил

Ниже я приведу несколько важных советов, которые пригодятся в процессе изучения.

Научитесь правильно искать

Это может показаться излишним, но это действительно важно. Умение задавать правильные вопросы поможет в процессе работы. Задавайте прямые, простые вопросы. Не доверяйте первому попавшемуся ответу. Исследуйте вопросы глубже, чем вам на данный момент.

Научитесь задавать правильные вопросы и выбирать правильное время

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

Помогайте другим

Заключение

Изучение JavaScript или других языков программирование – непростое дело, но оно безусловно стоит потраченных сил и времени. Изучение требует настойчивости. Но если у вас есть настойчивость, необходимые ресурсы, и мотивация, вы достигнете больших успехов. Какой бы способ обучения вы не выбрали, не забывайте, что он должен быть интересным для вас.