Какво представляват затварянията в JavaScript и как работят?



Затварянията в JavaScript се създават всеки път, когато се създава функция, по време на създаването на функцията. Той осигурява по-добър контрол върху кода при използването им.

е ориентиран към функции език, който дава много свобода на потребителя. Можете да създадете функция динамично, да я копирате в друга променлива или да я предадете като аргумент на друга функция и да позвъните от друго място по-късно. Затварянията в JavaScript се създават всеки път, когато се създава функция, по време на създаването на функцията. В тази статия ще разберем затварянията в следната последователност:

Въведение в затварянията в JavaScript

Затварянето е комбинация от a функция в комплект заедно с препратки към заобикалящото го състояние, т.е. лексикалната среда. С други думи, затварянето ви осигурява достъп от вътрешна функция до обхвата на външна функция.





кодер - затваряне в javascript - edureka

Повечето от разработчиците използват затваряне в JavaScript съзнателно или несъзнателно. Той осигурява по-добър контрол върху кода при използването им. Също така, това е най-често задаваният въпрос по време на всеки .



Пример:

функция foo () {var x = 10 функция internal () {return x} return inner} var get_func_inner = foo () console.log (get_func_inner ()) console.log (get_func_inner ()) console.log (get_func_inner ())

Изход:

10
10
10



Тук можете да получите достъп до променлива x, който е дефиниран във функция foo () чрез функция internal (), тъй като по-късно запазва веригата на обхвата на затваряща функция по време на изпълнение на заграждащата функция. По този начин вътрешната функция знае стойността на x чрез веригата на обхвата. Ето как можете да използвате затваряне в JavaScript.

Практически затваряния

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

Следователно можете да използвате затваряне навсякъде, където обикновено можете да използвате обект само с един метод.

def __init __ (само) python

Пример:

функция makeSizer (размер) {return функция () {document.body.style.fontSize = размер + 'px'}} var size12 = makeSizer (12) var size14 = makeSizer (14) var size16 = makeSizer (16)

Горният пример обикновено е приложен като обратно повикване: единична функция, която се изпълнява в отговор на събитието.

как да добавите java към пътя

Обхват верига

Затварянията в JavaScript имат три обхвата, като:

  • Местен обхват
  • Обхват на външните функции
  • Глобален обхват

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

// глобален обхват var x = 10 функция sum (a) {return function (b) {return function (c) {// external functions scope return function (d) {// local scope return a + b + c + d + x}}}} console.log (sum (1) (2) (3) (4)) // log 20

Може да се напише и без анонимни функции:

// глобален обхват var x = 10 функция sum (a) {return function sum2 (b) {return function sum3 (c) {// external functions scope return function sum4 (d) {// local scope return a + b + c + d + x}}}} var s = sum (1) var s1 = s (2) var s2 = s1 (3) var s3 = s2 (4) console.log (s3) // log 20

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

Затваряне в цикъл

Можете да използвате затваряне в JavaScript, за да съхранявате анонимна функция при всеки индекс на масив . Нека да вземем пример и да видим как затварянията се използват в рамките на цикъл.

Пример:

функция external () {var arr = [] var i for (i = 0 i<3 i++) { // storing anonymus function arr[i] = function () { return i } } // returning the array. return arr } var get_arr = outer() console.log(get_arr[0]()) console.log(get_arr[1]()) console.log(get_arr[2]())

Изход:

3
3
3
3

С това стигнахме до края на нашата статия. Надявам се, че сте разбрали как работи затварянето в JavaScript и как те се използват, за да получите по-добър контрол върху кода.

След като вече знаете за затварянията в JavaScript, разгледайте от Edureka. Обучението за сертифициране на уеб разработки ще ви помогне да научите как да създавате впечатляващи уебсайтове с помощта на HTML5, CSS3, Twitter Bootstrap 3, jQuery и Google API и да го разположите в Amazon Simple Storage Service (S3).

Имате въпрос към нас? Моля, споменете го в раздела за коментари на „Затваряне в JavaScript“ и ние ще се свържем с вас.