1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Привет, меня зовут Сергей. Уже год я работаю верстальщиком в хостинг-провайдере<a>REG.RU</a>и всё это время постепенно знакомлюсь с JavaScript. Чтобы узнать что-то новое об этом языке программирования, читаю такие источники, как MDN (Mozilla Developer Network), разные статьи в Medium, Learn.javascript.ru и смотрю видео на YouTube. Мне стало интересно, как же работает JavaScript изнутри, поэтому решил прочитать "Как устроен JavaScript" Дугласа Крокфорда.</p>
1
<p>Привет, меня зовут Сергей. Уже год я работаю верстальщиком в хостинг-провайдере<a>REG.RU</a>и всё это время постепенно знакомлюсь с JavaScript. Чтобы узнать что-то новое об этом языке программирования, читаю такие источники, как MDN (Mozilla Developer Network), разные статьи в Medium, Learn.javascript.ru и смотрю видео на YouTube. Мне стало интересно, как же работает JavaScript изнутри, поэтому решил прочитать "Как устроен JavaScript" Дугласа Крокфорда.</p>
2
<h2>Содержание</h2>
2
<h2>Содержание</h2>
3
<ul><li><a>Об авторе и книге</a></li>
3
<ul><li><a>Об авторе и книге</a></li>
4
<li><a>О чём книга и кому стоит её читать?</a></li>
4
<li><a>О чём книга и кому стоит её читать?</a></li>
5
<li><a>Интересные мысли из книги</a></li>
5
<li><a>Интересные мысли из книги</a></li>
6
<li><a>Заключение</a></li>
6
<li><a>Заключение</a></li>
7
</ul><h2>Об авторе и книге</h2>
7
</ul><h2>Об авторе и книге</h2>
8
-
<p>Дуглас Крокфорд - известный американский программист, создатель текстового формата обмена данными JSON (JavaScript Object Notation). Также Крокфорд постоянно участвует в развитии языка JavaScript и является автором таких инструментов, как статический анализатор кода JSLint и минификатор JSMin.</p>
8
+
<p>Дуглас Крокфорд - известный американский программист, создатель текстового формата обмена данными JSON (JavaScript Object Notation). Также Крокфорд постоянно участвует в развитии языка JavaScript и являетс�� автором таких инструментов, как статический анализатор кода JSLint и минификатор JSMin.</p>
9
<p>Дуглас Крокфорд написал несколько книг по языку JavaScript. Одна из них - "Как работает JavaScript" ("How JavaScript Works").</p>
9
<p>Дуглас Крокфорд написал несколько книг по языку JavaScript. Одна из них - "Как работает JavaScript" ("How JavaScript Works").</p>
10
<h2>О чём книга и кому стоит её читать?</h2>
10
<h2>О чём книга и кому стоит её читать?</h2>
11
<p>Для начала немного расскажу о содержании книги. Автор пишет о самом языке JavaScript, а не о каких-то других более утончённых его аспектах.</p>
11
<p>Для начала немного расскажу о содержании книги. Автор пишет о самом языке JavaScript, а не о каких-то других более утончённых его аспектах.</p>
12
<blockquote><p>"Здесь не рассматриваются механизмы обработки кода JavaScript или виртуальные машины. Книга - о самом языке и о том, что должен знать каждый программист. В ней я попробую сделать радикальную переоценку JavaScript, того, как он работает, как его можно усовершенствовать и как лучше использовать. Речь идет о том, как думать о JavaScript и как думать в JavaScript".</p>
12
<blockquote><p>"Здесь не рассматриваются механизмы обработки кода JavaScript или виртуальные машины. Книга - о самом языке и о том, что должен знать каждый программист. В ней я попробую сделать радикальную переоценку JavaScript, того, как он работает, как его можно усовершенствовать и как лучше использовать. Речь идет о том, как думать о JavaScript и как думать в JavaScript".</p>
13
</blockquote><p>В начале книги Крокфорд предупреждает читателя, что произведение подходит не новичкам, а специалистам, которые уже давно знакомы с JavaScript. Автор рассматривает основы языка с точки зрения их правильного использования в проектах, влияния на безопасность программы, написания практичного и понятного кода, сравнивает методы работы JavaScript с другими языками программирования.</p>
13
</blockquote><p>В начале книги Крокфорд предупреждает читателя, что произведение подходит не новичкам, а специалистам, которые уже давно знакомы с JavaScript. Автор рассматривает основы языка с точки зрения их правильного использования в проектах, влияния на безопасность программы, написания практичного и понятного кода, сравнивает методы работы JavaScript с другими языками программирования.</p>
14
<blockquote><p>"Эта книга написана для людей, имеющих определенный опыт работы с JаvаSсгiрt и желающих приобрести более чёткое и глубокое понимание того, как этот язык работает и как добиться от него наибольшей отдачи. Она также подойдет опытным программистам, желающим освоить еще один язык.</p>
14
<blockquote><p>"Эта книга написана для людей, имеющих определенный опыт работы с JаvаSсгiрt и желающих приобрести более чёткое и глубокое понимание того, как этот язык работает и как добиться от него наибольшей отдачи. Она также подойдет опытным программистам, желающим освоить еще один язык.</p>
15
</blockquote><blockquote><p>Издание не для начинающих. Надеюсь, что когда-нибудь напишу книгу и для них. Но эта им не подойдет. Её не назовешь легким чтивом. Беглый просмотр вам ничего не даст".</p>
15
</blockquote><blockquote><p>Издание не для начинающих. Надеюсь, что когда-нибудь напишу книгу и для них. Но эта им не подойдет. Её не назовешь легким чтивом. Беглый просмотр вам ничего не даст".</p>
16
</blockquote><p>Крокфорд рассказывает о создании текстового формата обмена данными JSON. Читатель познакомится с мнением автора о том, почему именно те или иные методы и механизмы он вложил в этот формат.</p>
16
</blockquote><p>Крокфорд рассказывает о создании текстового формата обмена данными JSON. Читатель познакомится с мнением автора о том, почему именно те или иные методы и механизмы он вложил в этот формат.</p>
17
<p>Дуглас Крокфорд не обходит и отрицательные стороны JavaScript. В книге он размышляет, каким должен быть следующий язык программирования, который придёт на смену JavaScript, и какие сильные стороны ему стоит унаследовать от своего предшественника. Автор рассматривает, как работает транслируемый язык NEO, который, как считает Крокфорд, должен помочь перейти к новому языку, решив проблемы, имеющиеся в JavaScript. Также Дуглас Крокфорд рассказывает о других занимательных моментах, касающихся JavaScript.</p>
17
<p>Дуглас Крокфорд не обходит и отрицательные стороны JavaScript. В книге он размышляет, каким должен быть следующий язык программирования, который придёт на смену JavaScript, и какие сильные стороны ему стоит унаследовать от своего предшественника. Автор рассматривает, как работает транслируемый язык NEO, который, как считает Крокфорд, должен помочь перейти к новому языку, решив проблемы, имеющиеся в JavaScript. Также Дуглас Крокфорд рассказывает о других занимательных моментах, касающихся JavaScript.</p>
18
<h2>Интересные мысли из книги</h2>
18
<h2>Интересные мысли из книги</h2>
19
<p>Читая книгу, я выделил несколько интересных для себя тезисов.</p>
19
<p>Читая книгу, я выделил несколько интересных для себя тезисов.</p>
20
<h3>Именование переменных и функций</h3>
20
<h3>Именование переменных и функций</h3>
21
<p>Автор считает, что использование символа подчеркивания (_) в имени переменной для указания её закрытости говорит о некомпетентности программиста.</p>
21
<p>Автор считает, что использование символа подчеркивания (_) в имени переменной для указания её закрытости говорит о некомпетентности программиста.</p>
22
<blockquote><p>"Символ подчеркивания (_) в начале или в конце имени иногда предназначается для указания общедоступного свойства или глобальной переменной, которая была бы закрытой, если бы программа была написана правильно. Следовательно, использование символа подчеркивания - признак некомпетентности программиста".</p>
22
<blockquote><p>"Символ подчеркивания (_) в начале или в конце имени иногда предназначается для указания общедоступного свойства или глобальной переменной, которая была бы закрытой, если бы программа была написана правильно. Следовательно, использование символа подчеркивания - признак некомпетентности программиста".</p>
23
</blockquote><p>Крокфорд утверждает, что все имена должны начинаться с буквы в нижнем регистре. Это основано на существующей проблеме с оператором new: если он стоит перед именем функции, то она вызывается как функция-конструктор. Поскольку обычная функция и конструктор выглядят одинаково, это может запутать программиста. Поэтому автор советует прийти к единому соглашению по именованию функций-конструкторов: "Все имена функций-конструкторов должны начинаться с прописной буквы, и никакое другое имя не должно начинаться с буквы в верхнем регистре".</p>
23
</blockquote><p>Крокфорд утверждает, что все имена должны начинаться с буквы в нижнем регистре. Это основано на существующей проблеме с оператором new: если он стоит перед именем функции, то она вызывается как функция-конструктор. Поскольку обычная функция и конструктор выглядят одинаково, это может запутать программиста. Поэтому автор советует прийти к единому соглашению по именованию функций-конструкторов: "Все имена функций-конструкторов должны начинаться с прописной буквы, и никакое другое имя не должно начинаться с буквы в верхнем регистре".</p>
24
<p>Далее Дуглас Крокфорд предлагает вообще отказаться от оператора new, объясняя это тем, что можно будет не использовать слова, которые начинаются с буквы в верхнем регистре.</p>
24
<p>Далее Дуглас Крокфорд предлагает вообще отказаться от оператора new, объясняя это тем, что можно будет не использовать слова, которые начинаются с буквы в верхнем регистре.</p>
25
<h3>Полезные методы</h3>
25
<h3>Полезные методы</h3>
26
<p>Из книги я узнал несколько полезных стандартных методов, которые наверняка пригодятся на практике.</p>
26
<p>Из книги я узнал несколько полезных стандартных методов, которые наверняка пригодятся на практике.</p>
27
<ul><li><p>метод Number.isNaN() позволяет протестировать, равно ли значение NaN или нет, и является более надёжным, чем функция isNan(), так как не преобразует параметр в число;</p>
27
<ul><li><p>метод Number.isNaN() позволяет протестировать, равно ли значение NaN или нет, и является более надёжным, чем функция isNan(), так как не преобразует параметр в число;</p>
28
</li>
28
</li>
29
<li><p>когда оператору typeof предлагается определить тип массива, то он возвращает "object". Дуглас Крокфорд советует использовать функцию Array.isArray(), чтобы точно определить принадлежность значения к массиву;</p>
29
<li><p>когда оператору typeof предлагается определить тип массива, то он возвращает "object". Дуглас Крокфорд советует использовать функцию Array.isArray(), чтобы точно определить принадлежность значения к массиву;</p>
30
</li>
30
</li>
31
<li><p>также я узнал о работе некоторых методов работы с массивами, их достоинствах и недостатках. Для себя отметил их классификацию "чистый - нечистый", разделяющую методы на не изменяющие и изменяющие исходные данные;</p>
31
<li><p>также я узнал о работе некоторых методов работы с массивами, их достоинствах и недостатках. Для себя отметил их классификацию "чистый - нечистый", разделяющую методы на не изменяющие и изменяющие исходные данные;</p>
32
</li>
32
</li>
33
<li><p>Дуглас Крокфорд, рассказывая об объектах, говорит, что для создания объекта использует Object.create(null). Автор подкрепляет свой выбор тем, что этот метод создаёт объект, который не имеет наследственности;</p>
33
<li><p>Дуглас Крокфорд, рассказывая об объектах, говорит, что для создания объекта использует Object.create(null). Автор подкрепляет свой выбор тем, что этот метод создаёт объект, который не имеет наследственности;</p>
34
</li>
34
</li>
35
<li><p>пожалуй, один из самых интересных моментов для меня - описание метода Object.freeze(). Метод получает объект и замораживает его, делая неизменяемым.</p>
35
<li><p>пожалуй, один из самых интересных моментов для меня - описание метода Object.freeze(). Метод получает объект и замораживает его, делая неизменяемым.</p>
36
</li>
36
</li>
37
</ul><blockquote><p>"К счастью, Object.create(null) создаёт объект, не обремененный наследственностью. Не возникает никакой путаницы ни с унаследованными свойствами, ни с непреднамеренным наследованием. В объекте нет ничего, кроме того, что в него помещено явным образом. Я сейчас пользуюсь Object.create(null) весьма часто".</p>
37
</ul><blockquote><p>"К счастью, Object.create(null) создаёт объект, не обремененный наследственностью. Не возникает никакой путаницы ни с унаследованными свойствами, ни с непреднамеренным наследованием. В объекте нет ничего, кроме того, что в него помещено явным образом. Я сейчас пользуюсь Object.create(null) весьма часто".</p>
38
</blockquote><p>Дуглас Крокфорд отмечает, что это положительно сказывается на безопасности и производительности проекта. Но автор предупреждает, что заморозка работает только на объектах верхнего уровня.</p>
38
</blockquote><p>Дуглас Крокфорд отмечает, что это положительно сказывается на безопасности и производительности проекта. Но автор предупреждает, что заморозка работает только на объектах верхнего уровня.</p>
39
<h3>This</h3>
39
<h3>This</h3>
40
<p>Привязка this довольно сложная в использовании, но Крокфорду удалось подробно и занимательно объяснить, как она работает. Автор рассказывает, каким образом она может повлиять на безопасность и надёжность проекта, и предлагает отказаться от её использования.</p>
40
<p>Привязка this довольно сложная в использовании, но Крокфорду удалось подробно и занимательно объяснить, как она работает. Автор рассказывает, каким образом она может повлиять на безопасность и надёжность проекта, и предлагает отказаться от её использования.</p>
41
<blockquote><p>"Моё решение этой проблемы - полный запрет this. Аргументы: проблематичность и ненужность этой привязки. Если мы уберем this из языка, его полноценность по Тьюрингу не пострадает. Поэтому я начал программировать в диалекте, свободном от this, чтобы выяснить степень трудностей, связанных с отказом от неё.</p>
41
<blockquote><p>"Моё решение этой проблемы - полный запрет this. Аргументы: проблематичность и ненужность этой привязки. Если мы уберем this из языка, его полноценность по Тьюрингу не пострадает. Поэтому я начал программировать в диалекте, свободном от this, чтобы выяснить степень трудностей, связанных с отказом от неё.</p>
42
</blockquote><blockquote><p>Как же я удивился тому, что ситуация не усложнилась, а упростилась и мои программы стали меньше и качественнее".</p>
42
</blockquote><blockquote><p>Как же я удивился тому, что ситуация не усложнилась, а упростилась и мои программы стали меньше и качественнее".</p>
43
</blockquote><h3>Чистота функций</h3>
43
</blockquote><h3>Чистота функций</h3>
44
<p>Любителей чистого кода порадует глава "Как работает чистота", где Крокфорд говорит о преимуществах чистых функций. Он советует, как добиться чистоты, и делает небольшой обзор всех компонентов языка, от которых нужно отказаться. К примеру, автор предлагает не использовать операторы присваивания, в том числе инструкции var и let, оставив только const. Оператор const позволяет<a>инициализировать константу</a>.</p>
44
<p>Любителей чистого кода порадует глава "Как работает чистота", где Крокфорд говорит о преимуществах чистых функций. Он советует, как добиться чистоты, и делает небольшой обзор всех компонентов языка, от которых нужно отказаться. К примеру, автор предлагает не использовать операторы присваивания, в том числе инструкции var и let, оставив только const. Оператор const позволяет<a>инициализировать константу</a>.</p>
45
<h3>Оптимизация программ</h3>
45
<h3>Оптимизация программ</h3>
46
<p>В главе "Как работает оптимизация" ищите практические советы. Для себя я отметил, что при оптимизации нужно выбирать именно те функции, из которых получается понятная и легко обслуживаемая программа. Также я выделил принцип, которого автор советует придерживаться программистам: "Измерить, затем вырезать, затем ещё раз измерить".</p>
46
<p>В главе "Как работает оптимизация" ищите практические советы. Для себя я отметил, что при оптимизации нужно выбирать именно те функции, из которых получается понятная и легко обслуживаемая программа. Также я выделил принцип, которого автор советует придерживаться программистам: "Измерить, затем вырезать, затем ещё раз измерить".</p>
47
<p>Далее Дуглас Крокфорд подробнее раскрывает принцип: "Перед оптимизацией нужно измерить производительность оптимизируемого кода. Это делается, чтобы установить базовый уровень и показать, что код замедляет всю программу. Если код погоды не делает, нужно искать в другом месте. Затем проводится тщательная<a>оптимизация кода</a>. После чего снова выполняются измерения. Если изменения не позволяют существенно превзойти базовый уровень, они отклоняются. Они не позволили добиться ожидаемого улучшения, а сбои мы не проверяем".</p>
47
<p>Далее Дуглас Крокфорд подробнее раскрывает принцип: "Перед оптимизацией нужно измерить производительность оптимизируемого кода. Это делается, чтобы установить базовый уровень и показать, что код замедляет всю программу. Если код погоды не делает, нужно искать в другом месте. Затем проводится тщательная<a>оптимизация кода</a>. После чего снова выполняются измерения. Если изменения не позволяют существенно превзойти базовый уровень, они отклоняются. Они не позволили добиться ожидаемого улучшения, а сбои мы не проверяем".</p>
48
<h2>Заключение</h2>
48
<h2>Заключение</h2>
49
<p>Это лишь часть интересных и полезных моментов, которые я для себя выделил. Уверен, что если перечитать<a>"Как устроен JavaScript"</a>, можно открыть новые занимательные факты об этом языке программирования.</p>
49
<p>Это лишь часть интересных и полезных моментов, которые я для себя выделил. Уверен, что если перечитать<a>"Как устроен JavaScript"</a>, можно открыть новые занимательные факты об этом языке программирования.</p>
50
<p>Читать эту книгу или нет - выбирать вам. Могу лишь сказать, что каждый, кто интересуется веб-разработкой, найдёт в ней для себя что-то новое и занятное.</p>
50
<p>Читать эту книгу или нет - выбирать вам. Могу лишь сказать, что каждый, кто интересуется веб-разработкой, найдёт в ней для себя что-то новое и занятное.</p>