HTML Diff
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>