Вход

Замыкание в JavaScript

Замыкание в JavaScript

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

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

В большинстве языков программирования чтобы сделать функцию или переменную глобальной необходимо указать какое-то ключевое слово (например global). В JavaScript всё иначе:

Функция или переменная является глобальной если не указана внутри какой либо вложенной функции

Верхний уровень вложенности программы на JavaScript занимает объект window:

1
2
3
4
5
var a = 5; 
 
// тождественные записи
console.log(a);
console.log(window.a);

ОСОБЕННОСТИ!

1
2
3
for (var i = 0; i < 5; i++) 
{...}
alert(i); // переменная i = 5 и будет доступна после цикла!

Что такое замыкание?

Под замыканием в JavaScript понимаются все доступные переменные для конкретной функции.

Пример:

1
2
3
4
5
6
7
8
9
10
11
12
13
 
var a1 = 5;
function metod1() {
  var a2 = 10;
  function metod2() {
 
  }
 
  metod2();
}
 
// Для функции <strong>metod1</strong> из-за замыкания доступна переменная <strong>a1</strong>.
// Для функции <strong>metod2</strong> из-за замыкания доступны переменные <strong>a1</strong> и <strong>a2</strong>.

В JavaScript Функция может содержать в себе функцию

Исключения!

В данном примере данная запись var func = new Function(», ‘alert(a)’); позволяет создать функцию не в рамках контекста родительской функции method1, а внутри объекта верхнего уровня window

1
2
3
4
5
6
7
8
9
10
11
var a = 1;
 
function method1() {
  var a = 2;
 
  var method2 = new Function('', 'alert(a)');
 
  return method2;
}
 
method1(); // выведет 1

14 ноября 2018 /

342 Views /

0 Comment
Ilya Web developer
Author

«Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.»Martin Golding

Отправить ответ

Please Login to comment
  Получать уведомления о новых комментариях  
Уведомлять