Вы ищете больше методов JavaScript?

Если это так, вы находитесь в правильном месте.

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

Давайте приступим к делу.

1. Закрытие

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

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

2. Привязка функций

Допустим, вы хотите увеличивать переменную counter на одну единицу при каждом нажатии кнопки. Что-то типа:

<button onclick=”increaseCounter()”>Increase Counter</button>

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

let counter = 0;function increaseCounter() {
  counter++;
}

Проблема в том, что переменную counter можно изменить напрямую, не вызывая функцию increaseCounter().

Итак, давайте переместим переменную counter в функцию:

function increaseCounter() {
  let counter = 0;
  counter++;
}

Нет, переменная counter будет сбрасываться на 0 при каждом вызове функции.

Это когда закрытие вступает в игру:

const increaseCounter = (function() {
  let counter = 0;
 
  return function() {
    counter = counter + 1;
    console.log(counter);
  };
})();

IIFE запускается только один раз и инициализирует переменную counter с помощью 0, а затем возвращает функцию, которая может получить доступ к переменной counter. Итак, когда вы вызываете increaseCounter(), он обновит counter, как и ожидалось.

«Как лучше контролировать «это» в JavaScript»

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

let book = {
  title: ‘Learn JavaScript’,
  printTitle() {
    console.log(`Book’s title: ${this.title}`);
  }
}setTimeout(book.printTitle, 1000); // Book’s title: undefined

Напечатанный текст, который мы ожидаем, будет Book’s title: Learn JavaScript, но мы получили Book’s title: undefined. Это потому, что программа больше не знает о this. Контекст уже потерян.

Чтобы решить эту проблему, мы можем использовать технику связывания функций.

let book = {
  title: ‘Learn JavaScript’,
  printTitle() {
    console.log(`Book’s title: ${this.title}`);
  }
}let printTitle = book.printTitle.bind(book);setTimeout(printTitle, 1000); // Book’s title: JavaScript

Я написал подробную статью о связывании функций. Если вы хотите узнать больше об этой технике, вам следует ознакомиться со статьей:

Использование методов call(), apply() и bind()

medium.com

3. Планирование задач

4. Рекурсия

JavaScript предоставляет вам два простых способа планирования выполнения задач:

setInterval() повторно запускает задачу через определенный интервал времени:

function sayHello() {
  console.log(‘Hello from the other side!’);
}setInterval(sayHello, 1000);

В приведенном выше фрагменте функция sayHello() выполняется повторно через каждые 1000 мс.

setTimeout() запускает задачу один раз через определенный интервал времени:

function sayHello() {
  console.log(‘Hello from the other side!’);
}setTimeout(sayHello, 1000);

Теперь функция sayHello() будет запускаться только один раз через 1000 мс.

5. Определите пространства имен

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

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

Например, мы напишем функцию, которая принимает x и n в качестве параметров и возвращает значение умножения x само на себя n раз.

Для традиционного подхода мы будем использовать оператор цикла:

function pow(x, n) {
  let result = 1;  for (let i = 0; i < n; i++) {
    result = result * x;
  }  return result;
}console.log(pow(3, 5)); // 243

И когда мы применим рекурсивный подход, это будет так:

function pow(x, n) {
  if (n === 1) {
    return x;
  } else {
    return x * pow(x, n — 1);
  }
}console.log(pow(3, 5)); // 243

Когда n === 1, результат и так очевиден. Здесь особо не о чем говорить, потому что pow(x, 1) вернет x.

Если n больше, чем 1, то мы используем наш здравый смысл в математике, чтобы представить pow(x, n) как x * pow(x, n — 1) (пример: x⁷ = x * x⁶). И так продолжаем делать шаг назад до n === 1.

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

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

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

Вывод

Чем больше кода вы добавляете в свой проект, тем больше вероятность возникновения конфликтов.

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

Самый простой пример пространства имен, который вы можете знать, но не осознавать, что это объекты:

let animal = {
  move: () => {
    console.log(‘Move!’);
  },
  jump: () => {
    consle.log(‘Jump!’);
  }
};

В примере функции move() и jump() находятся в пространстве имен под animal. Для их вызова мы используем animal.move() и animal.jump().

В реальных проектах с большими файлами исходного кода мы используем пространства имен следующим образом:

if (typeof APP === “undefined”) {
  APP = {};
  APP.ANIMAL = {};
}APP.ANIMAL.move = () => {
  console.log(‘Move’);
};APP.ANIMAL.jump = () => {
  console.log(‘Jump’);
};APP.ANIMAL.move(); // Move
APP.ANIMAL.jump(); // Jump

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

«https://shelbycounty.iowa.gov/msk/video-Jetu-v-Ram-mv-rs1-01.html»
«https://shelbycounty.iowa.gov/msk/video-Jetu- v-Ram-mv-rs1-02.html»
«https://shelbycounty.iowa.gov/msk/video-Jetu-v-Ram-mv-rs1-03.html»
« https://shelbycounty.iowa.gov/msk/video-Jetu-v-Ram-mv-rs1-04.html»
«https://shelbycounty.iowa.gov/msk/video-Jetu-v -Ram-mv-rs1-05.html»
«https://shelbycounty.iowa.gov/msk/videos-Eagles-v-Cardinals-liv-ttx01.html»
«https:/ /shelbycounty.iowa.gov/msk/videos-Eagles-v-Cardinals-liv-ttx02.html»
«https://shelbycounty.iowa.gov/msk/videos-Eagles-v-Cardinals-liv- ttx03.html»
«https://shelbycounty.iowa.gov/msk/videos-Eagles-v-Cardinals-liv-ttx04.html»
«https://shelbycounty.iowa.gov/ msk/videos-Eagles-v-Cardinals-liv-ttx05.html»
«https://shelbycounty.iowa.gov/msk/chiefs-v-sa-xx-070fg01.html»
« https://shelbycounty.iowa.gov/msk/chiefs-v-sa-xx-070fg02.html»
«https://shelbycounty.iowa.gov/msk/chiefs-v-sa-xx-070fg03 .html»
«http s://shelbycounty.iowa.gov/msk/chiefs-v-sa-xx-070fg04.html»
«https://shelbycounty.iowa.gov/msk/chiefs-v-sa-xx-070fg05 .html»
«https://shelbycounty.iowa.gov/msk/video-Giants-v-Browns-mz001.html»
«https://shelbycounty.iowa.gov/msk/video -Giants-v-Browns-mz002.html»
«https://shelbycounty.iowa.gov/msk/video-Giants-v-Browns-mz003.html»
«https://shelbycounty .iowa.gov/msk/video-Giants-v-Browns-mz004.html»
«https://shelbycounty.iowa.gov/msk/video-Giants-v-Browns-mz005.html»
«https://shelbycounty.iowa.gov/msk/wrestling-tlc-v-01.html»
«https://shelbycounty.iowa.gov/msk/wrestling-tlc-v-02. html»
«https://shelbycounty.iowa.gov/msk/wrestling-tlc-v-03.html»
«https://shelbycounty.iowa.gov/msk/wrestling-tlc- v-04.html»
«https://shelbycounty.iowa.gov/msk/wrestling-tlc-v-05.html»
«https://shelbycounty.iowa.gov/pvc/ видео-Jet-v-Ram-ntv-091.html»
«https://shelbycounty.iowa.gov/pvc/video-Jet-v-Ram-ntv-092.html»
« https://shelbycou nty.iowa.gov/pvc/video-Jet-v-Ram-ntv-093.html»
«https://shelbycounty.iowa.gov/pvc/video-Jet-v-Ram-ntv-094 .html»
«https://shelbycounty.iowa.gov/pvc/video-Jet-v-Ram-ntv-095.html»
«https://shelbycounty.iowa.gov/pvc /video-Chiefs-v-liv-update-01.html»
«https://shelbycounty.iowa.gov/pvc/video-Chiefs-v-liv-update-02.html»
«https://shelbycounty.iowa.gov/pvc/video-Chiefs-v-liv-update-03.html»
«https://shelbycounty.iowa.gov/pvc/video-Chiefs-v- liv-update-04.html»
«https://shelbycounty.iowa.gov/pvc/video-Chiefs-v-liv-update-05.html»
«https://shelbycounty. iowa.gov/pvc/video-Eag-v-Car-dnf-01.html»
«https://shelbycounty.iowa.gov/pvc/video-Eag-v-Car-dnf-02.html »
«https://shelbycounty.iowa.gov/pvc/video-Eag-v-Car-dnf-03.html»
«https://shelbycounty.iowa.gov/pvc/video -Eag-v-Car-dnf-04.html»
«https://shelbycounty.iowa.gov/pvc/video-Eag-v-Car-dnf-05.html»
«https ://shelbycounty.iowa.gov/pvc/video-U-Chile-ver-cdf-01.html»
«ht tps://shelbycounty.iowa.gov/pvc/video-U-Chile-ver-cdf-02.html»
«https://shelbycounty.iowa.gov/pvc/video-U-Chile-ver -cdf-03.html»
«https://shelbycounty.iowa.gov/pvc/video-U-Chile-ver-cdf-04.html»
«https://shelbycounty.iowa .gov/pvc/video-U-Chile-ver-cdf-05.html»
«https://shelbycounty.iowa.gov/pvc/video-Boca-rpp-tv-01.html»
«https://shelbycounty.iowa.gov/pvc/video-Boca-rpp-tv-02.html»
«https://shelbycounty.iowa.gov/pvc/video-Boca-rpp- tv-03.html»
«https://shelbycounty.iowa.gov/pvc/video-Boca-rpp-tv-04.html»
«https://shelbycounty.iowa.gov/ pvc/video-Boca-rpp-tv-05.html»
«https://shelbycounty.iowa.gov/pvc/video-Riv-v-Hur-tnt-01.html»
« https://shelbycounty.iowa.gov/pvc/video-Riv-v-Hur-tnt-02.html»
«https://shelbycounty.iowa.gov/pvc/video-Riv-v-Hur -tnt-03.html»
«https://shelbycounty.iowa.gov/pvc/video-Riv-v-Hur-tnt-04.html»
«https://shelbycounty.iowa .gov/pvc/video-Riv-v-Hur-tnt-05.html»
«http://isra.org/bwn/vide o-Jet-v-Ram-ntv-091.html»
«http://isra.org/bwn/video-Jet-v-Ram-ntv-092.html»
«http: //isra.org/bwn/video-Jet-v-Ram-ntv-093.html»
«http://isra.org/bwn/video-Jet-v-Ram-ntv-094.html »
«http://isra.org/bwn/video-Jet-v-Ram-ntv-095.html»
«http://isra.org/bwn/video-Chiefs-v -liv-update-01.html»
«http://isra.org/bwn/video-Chiefs-v-liv-update-02.html»
«http://isra.org /bwn/video-Chiefs-v-liv-update-03.html»
«http://isra.org/bwn/video-Chiefs-v-liv-update-04.html»
«http://isra.org/bwn/video-Chiefs-v-liv-update-05.html»
«http://isra.org/bwn/video-Eag-v-Car-dnf- 01.html»
«http://isra.org/bwn/video-Eag-v-Car-dnf-02.html»
«http://isra.org/bwn/video- Eag-v-Car-dnf-03.html»
«http://isra.org/bwn/video-Eag-v-Car-dnf-04.html»
«http:// isra.org/bwn/video-Eag-v-Car-dnf-05.html»
«http://isra.org/bwn/video-U-Chile-ver-cdf-01.html»< br /> «http://isra.org/bwn/video-U-Chile-ver-cdf-02.html»
«http://isra.o

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

Знаете другие крутые техники? Пожалуйста, дайте мне знать в комментарии ниже.

Надеюсь, вам понравится эта статья.