Pages Menu Stijit.com
Twitter
Categories Menu
Замыкания в javascript — пример замыканий javascript функций

Замыкания в javascript — пример замыканий javascript функций

Замыкания в javascript используются для того, чтобы скрывать значения переменных и хранить значения функций. Суть в том, что при замыкании создается одна функция, в которой задаются переменные и которая в результате свое работы возвращает свою вложенную функцию. Затем в ней (в основной функции) создается вложенная функция, в которой делаются какие-то операции с переменными основной функции и которая возвращает результат этих операций. Далее основная функция приравнивается к какой-то переменной — эта переменная может вызываться сколько угодно раз и при этом в ней будут храниться и обновляться значения переменных основной функции т.к. она «замкнута».

Создание числового буфера с помощью замыканий

Для понимания что такое замыкания в javascript разберем пример. Нужно создать функцию makeBuffer, которая создает некий числовой буфер. Если этому буферу передавать аргумент число, то функция запоминает это число, а потом, когда вызвать функцию без аргумента, то она вернет квадрат суммы этих чисел. Пример:
var buffer = makeBuffer();
buffer(1);
buffer(2);
buffer(3);

console.log(buffer()); // -> 36

Если передать в качестве аргумента null, то буфер должен почиститься:

var buffer = makeBuffer();
buffer(3);
buffer(2);
alert(buffer()); // -> 25
buffer(null);
alert(buffer()); // -> 0

Аналогично, если буферу ничего не было передано раньше, то он возвращает ноль:

var buffer = makeBuffer();
alert(buffer()); // -> 0

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

<!doctype html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
</head>
<body>
  <script>

  function makeBuffer() {
    var digit = 0,
        sum = 0;

    function buffer(piece) {
      if (piece === undefined) { //Вызов без аргументов - выводим квадрат суммы чисел
        return sum * sum;
      } else if (piece == null) { //Вызов с null - чистим буфер 
      sum = 0;
      } else if (typeof(piece) == "number") { //Вызов с числом - добавляем число к общей сумме
      sum += piece;
      } else { //Вызов с любым символом кроме цифры и null
        return;
      }
    };
    return buffer;
  };

  var buffer = makeBuffer();

  buffer(1);
  buffer(2);
  buffer(3);
  console.log(buffer()); // 36
  document.write("buffer result: " + buffer() + " ");

  buffer(null);

  console.log(buffer()); // 0
  document.write("buffer result: " + buffer() + " ");

  buffer("abc");

  console.log(buffer()); // 0
  document.write("buffer result: " + buffer());

</script>
</body>
</html>

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

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *