ECMAScript sluten
- Föregående sida Funktioner objekt
- Nästa sida Orienterad objekt
Det mest missförståeliga med ECMAScript är att det stöder sluten (closure).
En closure är en funktion som inkluderar lexikalsk notation inklusive variabler som inte beräknas, vilket innebär att en funktion kan använda variabler definierade utanför funktionen.
Enkel closure-exempel
Användning av globala variabler i ECMAScript är ett enkelt exempel på closure.
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
I detta stycke kod, när skriptet laddas in i minnet, beräknas inte värdet av variabeln sMessage för funktionen sayHelloWorld(). Funktionen capture sMessage endast för framtida användning, vilket innebär att tolkningsprogrammet vet att det ska kontrollera värdet av sMessage vid anrop av funktionen sayHelloWorld(). sMessage kommer att tilldelas värde när funktionen sayHelloWorld() anropas (på sista raden) och visar meddelandet "hello world".
Komplex closure-exempel
Att definiera en funktion inom en annan gör closures mer komplexa. Till exempel:
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
Här inkluderar funktionen addNum() funktionen doAdd() (en closure). Inre funktionen är en closure eftersom den får tillgång till de externa funktionens parametrar iNum1 och iNum2 samt värdet av den globala variabeln iBaseNum. Sista steget i addNum() anropar doAdd(), lägger till två parametrar och den globala variabeln och returnerar summan av dem.
Den viktiga konceptet att förstå här är att doAdd() -funktionen accepterar inte några parametrar, den använder värden som hämtas från exekveringsmiljön.
Man kan se att closures är ett mycket kraftfullt och mångsidigt del av ECMAScript, som kan användas för att utföra komplexa beräkningar.
Tips:Liksom när man använder några avancerade funktioner, använda sig av closures med försiktighet, eftersom de kan bli mycket komplexa.
- Föregående sida Funktioner objekt
- Nästa sida Orienterad objekt