[Мини-книга JS] Мое мировоззрение JavaScript

JavaScript

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

Для нелинейной системы любое линейное мышление будет предвзятым.

С точки зрения «Из-под контроля» с нелинейной системой вы точно не знаете, какой она будет, пока не запустите ее.

Было сказано, что!

В книге «Учись хорошо» важное предположение звучит так:За сложными явлениями состоит из нескольких простых правил, доминированных.

по моему мнениюJSЭто также имеет место.

Почему JavaScript (ES3) такой?

может быть толькоJavaScriptАвтор книги знает, ведь ему понадобилось всего 10 дней, чтобы изобрести это могущественное существо.

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

Я надеюсь, что эта статья может вдохновить некоторых новичков, особенно тех, кто работает с языками, ориентированными на классы (такими какJavaПользователь).

Кроме этого, в этой статье больше ничего не требуется.

Изобретатель JSBrendan EichРазговор на языке имеет две основные характеристики:первоклассная функцияа такжепрототип объекта.

Первоклассная функция, я думаю, что этоJSсамое центральное.

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

Что такое функция первого класса?First-class function)?

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

Он может делать то, что может.

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

Кроме того, что значение может быть присвоено переменной, оно может существовать отдельно. Например"x"Таким образом, функция может быть анонимной.

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

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

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

Есть ли какие-то другие первоклассные граждане, кроме функций?

Функции, массивы и объекты тоже. Все они воплощают в себе свойство «стоимости».

Таким образом, вJSСреди них особенно известны два предложения:

JavaScriptвсе есть объект,

JavaScriptВсе того стоит.

оба вJSДостигается единство противоположностей.

Узнав это, может быть, вы перестанете путаться во многих вещах, а будете все более и более разумны.

Следующий пример проиллюстрирует, почемуJSТам столько всего "странного".

1. Функции как параметры

Например:

setTimeout(function() {}, 1000);

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

setTimeout(later, 1000);

Вы помните, многие книги говорят вам не писатьlater()?

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

[1, 2, 3].map(function(value) { return value * value; });

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

2. Функции как возвращаемые значения

Функция как возвращаемое значение напрямую приводит к существованию замыкания.

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

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

Например:

function sum(a, b) {
  return a + b;
};

Но когда функция действительно возвращает функцию, происходят интересные вещи:

function sumCreater(x) {
  return function(y) {
    return x + y;
  };
}
var sum10 = sumCreater(10);
sum10(12)// 22

Хорошо, если функция возвращает функцию, но возвращаемая функция должна хотя бы запускаться.

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

Что, если нет? Вы хотите, чтобы браузер сообщал об ошибке напрямую? Этот механизм и есть замыкание.

Я не буду вдаваться в подробности здесь, потому что я просто строю картину мира.

О функциях можно использовать как возвращаемые значения, можно использовать как параметры. Это включает в себя расширенные концепции функций.

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

3. Выражение вызова анонимной функции

(function() {})();

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

4. Объекты

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

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

var object = {
  say: function() {
    console.log('hello world!');
  };
};

5. этот вопрос

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

Это должно быть необходимо, иначе что используется для ссылки на сам текущий объект?

var object = {
  name: 'laoyao',
  say: function() {
    console.log(this.name);
  };
};

Итак, возникает вопрос,thisОн существует в рамках функциональной семантики.

Если функция вызывается напрямую,thisУказать на что?

Могу ли я изменить функцию динамическиthisуказать на?

ВышеупомянутоеJSизthisуказать на проблему.

6. Механизм повторного использования объектов

У вас есть что-то, что я считаю хорошим, и вы хотите использовать это для меня.

Способ 1, иду воровать или брать взаймы,JSмогуcallа такжеapply.

Способ 2, яcopyОдин экземпляр, это миксин на JS (mixin).

Способ 3, я признаю тебя отцом. Ты мой отец, я использую твои вещи, не так ли? ЭтоJavaмировоззрение.

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

Метод 3 и метод 4 — это две идеи повторного использования, одна — наследование, а другая — делегирование.

а такжеJSизprototype, что является механизмом делегирования. Пожалуйста, обратитесь к первому тому «JavaScript, которого вы не знаете».

7. Новый оператор

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

Так что должен быть способ сделать это в чем-то вроде "шаблона". Этоnewэффект.

а такжеJSсерединаnewа такжеJavaсерединаnew, Смысл поверхностного слоя тот же, что и для генерации экземпляра объекта.

Однако,JSсерединаnewНа мой взгляд, он просто инкапсулирует отношения делегирования между объектами.

постскриптум

Я всегда правJSмировоззрение.

Почему используется термин «мировоззрение»? Потому что недавно я читал книгу «Мировоззрение».

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

Например, если вы считаете, что центром мира является Земля, вы можете объяснить, почему предметы падают.

Точно так же, если вы верите в гравитацию, вы можете объяснить, почему предметы падают.

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

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

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

Говоря о парадигмах программирования, упомяните шаблоны проектирования.

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

Мотивация к решению проблемы та же, но вJavaсложные формы в , а вJS, но гораздо проще.

это то же самое, чтоJSФункции — это неразделимые объекты первого класса.

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

Часто «есть один» лучше, чем «есть один».

Итак, если вы хотите быть богатым, вам не обязательно быть богатым во втором поколении, вы можете разбогатеть.

Поэтому, если вы хотите познать мир, вам не обязательно самому становиться путешественником, вы можете пойти к Чжиху и спросить: «Какой это опыт — путешествовать по миру?».

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

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

. . .

Я надеюсь, что вы также сможете найти способ генерироватьJSЭто должна быть такая иллюзия.

Эта статья закончилась.

Портал «JavaScript Mini Book», всесторонне закладывающий прочную основу

Коллекция наггетсов