Globala variabler i JavaScript
Och varför de ogillas

I javascript finns det två sorters variabler, lokala variabler och globala variabler.
Alla variabler utanför function() {} är globala, och de inuti funktioner är lokala.

Varför är de onda?

Att använda sig av globala variabler anses av många som dålig praxis. Och de har rätt! Men man behöver inte vara rädd att använda dem för det.

Anledningen till att använda lokala variabler är att man inte behöver oroa sig att variabeln används på något annat ställe i programmet, vilket i så fall skulle kunna orsaka buggar.
Detta är speciellt viktigt i JavaScript då alla variabler, metoder och attribat går att skriva över.
En annan fördel med lokala variabler är att funktionerna blir lättare att testa.

Kodexempel:

function bil() {
	if(motor=="v8") console.log("brum brum");
}

I kodexemplet ovan är motor en global varibel eftersom den inte har deklarerats.
För att ta reda på vad motor är för något måste man leta igen resten av koden. Det går bra om det är en liten fil, men om koden består av tusentals rader uppdelat i flera filer blir det jobbigare.

Lösningen är att göra motor till en lokal variabel genom att sätta den i funktionens argument.

function bil(motor) {
	if(motor=="v8") console.log("brum brum");
}

Då behöver man inte leta reda på variabeln. Och det blir lättare att testa funktionen!
Man kan testa funktionen genom att köra den med olika argument. Exempel:

bil("v6");
bil("v8");
bil("v12");

En funktion i funktionen

Om en funktion endast används på ett ställe, lägg den då där den används.

function counter(antal) {

	return increase(antal);

	// En funktion i funktionen
	function increase(someNumber) {
		var incremental = 1;
		
		return someNumber + incremental;
	}
}

Då behöver man inte leta igenom resten av koden för att hitta vad "increase" gör för något.

Singletons

Om en funktion eller variabel används ofta kan det vara smidigare att lägga den som en global variabel i stället för att skicka den vidare som argument i alla funktioner.
Man brukar kalla en sådan variabel för en singleton. Det kan till exempel vara "inställningar" eller ett object som håller reda på allt i en spelvärld.

Bibliotek och moduler

Om du skriver ett bibliotek eller en modul är det god praxis att insluta hela biblioteket eller modulen i en endaste variabel eller funktion. På så sätt är det mindre risk att någon annan variabel eller funktion blir överskriven. Och det blir lättare att hitta dina funktioner.
Att lägga alla funktioner under Ett namn brukar kallas "name-spacing"

(function() {
	var lokalVariabel1 = 1;
	var	lokalVariabel2 = 2;
	
	GLOBAL_VARIABEL = lokalVariabel1 + lokalVariabel2;
	
})();

Detta är en så kallad "closure". En anonym funktion skapas och körs.

Endast variabeln GLOBAL_VARIABEL går att använda utanför den anonyma funktionen.

Moduler i Node.JS

I Node.JS måste man lägga globala varibel i objektet global eller importera dem med require.

global.minvariabel = "foo";

var merFunktionalitet = require("merfunktionalitet");

 


Denna artikel är skriven av Johan Zetterberg som en del av Johan's JavaScript guide.


Följ mig via RSS:   RSS https://zäta.com/rss.xml (ange adressen i din feed-läsare)