Жаңа функцияларды және басқа да ішкі функциялар жариялауға болады. Бұл қабылдауды жоғарыдан қолдана отырып, makePerson() функциясын жасағанбыз. Салынған функциялардың басты ерекшелігі олардың жарияланған басты -функцияларында айнымалыға қол жеткізе алады:
function betterExampleNeeded() { var a = 1;
function oneMoreThanA() { return a + 1;
}
return oneMoreThanA();
}
Егер сіздің функцияңыз өзінің жұмысында басқа еш жерде қолданылмайтын функцияларды пайдаланса, онда қосалқы функцияларды негізгіге салуға болады. Бұл жаһандық объектіде функциялар санын қысқартады, бұл өте жақсы.
Жаһандық айнымалы санын қысқартудың тағы бір тамаша тәсілі. Осылай код жазғанда жаһандық айнымалылар жиі туындайтын болады, олар әр түрлі функцияларға қол жетімді болады. Бұл барлық кодты қиындатады, оны оқылатын етіп құрайды. Салынған функциялар өзінің ауыспалы басты функцияларына қол жеткізе алады, және оларды топтастыру үшін көптеген функцияларды бірге пайдалана аламыз (әрине, ақылға қонымды шекте), жаһандық объектті тазалықта және тәртіпте сақтауға мүмкіндік береді.
Тұйықталу
JavaScript құралдарының ең бір қуатты және түсініксізіне келдік.
Талдап көрейікші.
function makeAdder(a) { return function(b) {
return a + b;
};
}
var x = makeAdder(5); var y = makeAdder(20); x(6); // ?
y(7); // ?
makeAdder функциясы жаңа функция жасайды, ол функцияларды құру кезінде алынған мәнді мәнге қосады.
Осындайды алдыңғы мысалда көрдік, ішкі функциялар басқа функцияларға ауыспалы алып кіруші болып жарияланған. Тек мысалда, негізгі функциясы салынғанды қайтарады. Алғашқыда, бұл локальды айнымалылар жойылып кетуі мүмкін көрінуі мүмкін. Бірақ олар жойылмайды — әйтпесе код мүлде орындалмауы мүмкін еді. Оған қоса барлығына " makeAdder функцияларының екі түрлі "көшірмелерінің әр түрлі айнымалылары берілген (бір көшірмесі 5 қосады, екіншісі 20). Міне, нәтижесінде:
x(6); // возвратит 11 y(7); // возвратит 27
Міне, не болды: JavaScript функциясын орындағанда 'scope' объектісі құрылады, ол осы функциялардың ішінде жарияланған барлық жергілікті айнымалыларды қамтиды. Ол кез келген мәнмен инициализациялайды, берілген функциялардың параметрі ретінде. 'Scope' жаһандық объектіге ұқсас, ол құрамында барлық жаһандық айнымалылар және функцияларды ұстайды, бірнеше маңызды ерекшеліктерінен басқа: әрбір функцияларды шақыру кезінде жаңа 'scope' объектісі құрылады, жаһандық объектісіне айырмашылығы сіздің кодыңыздан 'scope' объектісіне тікелей қол жеткізу мүмкін болмайды. Және берілген объект қасиеттері бойынша өтіп кету тәсілі жоқ.
Сондықтан makeAdder функциялары шақыру кезінде жаңа 'scope' объектісі жалғыз қасиетпен құрылады: оған мәні беріледі, берілген функциялар ретінде сапасын қайта қарастыруды сұрайды. Содан кейін makeAdder жаңа анонимді функцияны қайтарады. Кез келген басқа жағдайда 'құрастырушы қоқыс' scope объектісін жойуы мүмкін, бірақ қайтарылатын функция бұл обьектіге сілтемеленеді. Нәтижесінде scope объектісі оған ең болмағанда бір сілтемеде жоқ болғанша жойылмайды.
Барлық scope объектілері көріну облыстарының тізбегіне қосылады, ол JavaScript'а объектілік жүйесіне ұқсас тізбекті прототиптер.
Достарыңызбен бөлісу: |