JavaScript -sluitings
JavaScript-veranderlikes kan aan die plaaslike of globale omvang behoort.
Globale veranderlikes kan plaaslik (privaat) gemaak word met sluitings .
Globale veranderlikes
A function
kan toegang verkry tot alle veranderlikes wat binne die funksie gedefinieer is, soos volg:
Voorbeeld
function myFunction() {
let a = 4;
return a * a;
}
Maar 'n function
kan ook toegang verkry tot veranderlikes wat buite die funksie gedefinieer is, soos volg:
Voorbeeld
let a = 4;
function myFunction() {
return a * a;
}
In die laaste voorbeeld is a 'n globale veranderlike.
In 'n webblad behoort globale veranderlikes aan die vensterobjek.
Globale veranderlikes kan gebruik (en verander) word deur alle skrifte in die bladsy (en in die venster).
In die eerste voorbeeld is a 'n plaaslike veranderlike.
'n Plaaslike veranderlike kan slegs binne die funksie gebruik word waar dit gedefinieer is. Dit is weggesteek van ander funksies en ander skrifkode.
Globale en plaaslike veranderlikes met dieselfde naam is verskillende veranderlikes. Om die een te wysig, verander nie die ander nie.
Veranderlikes geskep sonder 'n verklaring sleutelwoord ( var
,
let
, of const
) is altyd globaal, selfs al is hulle geskep binne 'n funksie.
Voorbeeld
function myFunction() {
a = 4;
}
Veranderlike leeftyd
Globale veranderlikes leef totdat die bladsy weggegooi word, soos wanneer jy na 'n ander bladsy navigeer of die venster toemaak.
Plaaslike veranderlikes het kort lewens. Hulle word geskep wanneer die funksie opgeroep word, en uitgevee wanneer die funksie voltooi is.
'n Teen-dilemma
Gestel jy wil 'n veranderlike gebruik om iets te tel, en jy wil hê dat hierdie teller vir alle funksies beskikbaar moet wees.
Jy kan 'n globale veranderlike gebruik, en 'n function
om die teller te verhoog:
Voorbeeld
// Initiate counter
let counter = 0;
// Function to increment
counter
function add() {
counter += 1;
}
// Call add() 3 times
add();
add();
add();
// The counter should now be 3
Daar is 'n probleem met die oplossing hierbo: Enige kode op die bladsy kan die teller verander, sonder om add() te roep.
Die teller moet plaaslik vir die add()
funksie wees, om te verhoed dat ander kode dit verander:
Voorbeeld
// Initiate counter
let counter = 0;
// Function to increment
counter
function add() {
let counter = 0;
counter += 1;
}
//
Call add() 3 times
add();
add();
add();
//The counter should
now be 3. But it is 0
Dit het nie gewerk nie, want ons vertoon die globale teller in plaas van die plaaslike teller.
Ons kan die globale teller verwyder en toegang tot die plaaslike teller kry deur die funksie dit te laat terugstuur:
Voorbeeld
// Function to increment
counter
function add() {
let counter = 0;
counter += 1;
return counter;
}
//
Call add() 3 times
add();
add();
add();
//The counter should
now be 3. But it is 1.
Dit het nie gewerk nie, want ons het die plaaslike teller teruggestel elke keer as ons die funksie oproep.
'n JavaScript-innerlike funksie kan dit oplos.
JavaScript geneste funksies
Alle funksies het toegang tot die globale omvang.
Trouens, in JavaScript het alle funksies toegang tot die omvang "bo" hulle.
JavaScript ondersteun geneste funksies. Geneste funksies het toegang tot die omvang "bo" hulle.
In hierdie voorbeeld het die innerlike funksie plus()
toegang tot die counter
veranderlike in die ouerfunksie:
Voorbeeld
function add() {
let counter = 0;
function plus() {counter += 1;}
plus();
return counter;
}
Dit kon die teendilemma opgelos het as ons die plus()
funksie van buite kon bereik.
Ons moet ook 'n manier vind om counter = 0
net een keer uit te voer.
Ons het 'n sluiting nodig.
JavaScript-sluitings
Onthou jy selfoproepfunksies? Wat doen hierdie funksie?
Voorbeeld
const add = (function () {
let counter = 0;
return function () {counter += 1; return counter}
})();
add();
add();
add();
// the counter is now 3
Voorbeeld Verduidelik
Die veranderlike add
word aan die terugkeerwaarde van 'n selfoproepende funksie toegeken.
Die selfoproepfunksie werk net een keer. Dit stel die teller op nul (0), en gee 'n funksie-uitdrukking terug.
Op hierdie manier word voeg 'n funksie. Die "wonderlike" deel is dat dit toegang tot die toonbank in die oueromvang kan kry.
Dit word 'n JavaScript -sluiting genoem. Dit maak dit moontlik vir 'n funksie om " private " veranderlikes te hê.
Die teller word deur die omvang van die anonieme funksie beskerm, en kan slegs verander word deur die byvoegfunksie te gebruik.
'n Sluiting is 'n funksie wat toegang het tot die oueromvang, selfs nadat die ouerfunksie gesluit het.