Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision.

Hissning är en JavaScript-mekanism som låter dig komma åt variabler och funktioner innan du initierar dem. Att lyfta en sådan deklaration flyttar den effektivt till toppen av dess räckvidd.

Lär dig allt om hur hissning fungerar i JavaScript och hur du hanterar det bäst för att undvika fel i din kod.

Hissvariabler Med var, let och const

Hissning är möjlig eftersom JavaScript använder kompileringssystemet JIT (Just-in-Time), som skannar din kod för att identifiera alla variabler i deras respektive omfång.

JIT-kompilatorn lyfter sedan alla instanser av variabeldeklarationer till toppen av deras omfattning vid kompilering. JavaScript lyfter bara deklarationer av variabler, inte deras initialiseringar.

Variablernas beteende, när de hissas, beror på vilket nyckelord du deklarerar dem med, eftersom varje nyckelord beter sig olika.

var

Åtkomst till en oinitierad variabel deklarerad med var nyckelordet kommer tillbaka odefinierad. Till exempel:

instagram viewer
trösta.log (foo); // odefinierat
var foo = 2;

Ovanstående kodloggar odefinierad för att det ringer console.log innan den initierar variabeln.

JavaScript-kompilatorn ser det föregående kodblocket så här:

var foo;
trösta.log (foo); // odefinierat
foo = 2;

Under hissning följer variablerna regler för JavaScript-omfattning. Javascript kommer bara att hissa en variabel till toppen av omfånget du deklarerade den i. Ett försök att logga värdet på en variabel utanför dess deklarerade omfånget kommer att resultera i en Referensfel. Till exempel, om du deklarerar en variabel inuti en funktion, kommer den inte att vara synlig utanför detta omfång:

fungeramyFunction() {
trösta.log (foo); // odefinierat
var foo = 10;
}

myFunction();
trösta.log (foo); // ReferenceError: foo är inte definierad

Att försöka komma åt en variabel utanför dess räckvidd kommer att resultera i en Referensfel.

låt och konst

Enligt MDN dokumentation på låta och konst hissning, JavaScript hissar också upp variabler som deklareras med låta och konst nyckelord. Men till skillnad från variabler som deklareras med var nyckelord, initialiseras de inte med en odefinierad värde.

Till exempel:

fungeramyFunction() {
trösta.log (foo); // odefinierat
trösta.log (stapel); // ReferenceError: Kan inte komma åt 'bar' före initiering
trösta.log (baz); // ReferenceError: Kan inte komma åt 'baz' före initialisering

var foo = 5;
låta bar = 10;
konst baz = 15;
}

myFunction();

Du kan inte komma åt variabler som deklarerats med nyckelorden let och const innan du initierat dem med ett värde.

Lyftfunktioner

JavaScript-hissar fungerar på samma sätt som variabler. Precis som med variabler beror det på hur du deklarerar dem. JavaScript lyfter till exempel funktionsdeklarationer på ett annat sätt än funktionsuttryck.

En funktionsdeklaration är en funktion som deklareras med ett namn, medan ett funktionsuttryck är en funktion vars namn du kan utelämna. Till exempel:

fungerafoo() {
// funktionsdeklaration
}

konst bar = () => {
// funktionsuttryck
}

JavaScript lyfter funktionsdeklarationer men inte funktionsuttryck. Till exempel:

foo(); // 5
bar(); // TypeError: bar() är inte en funktion

// Funktionsdeklaration
fungerafoo() {
trösta.logga(5);
}

// Funktionsuttryck
var bar = fungerauttryck() {
trösta.logga(10);
};

Denna kod anropar foo innan den deklareras och initieras som en funktion, men den loggas fortfarande 5 till konsolen. Försöker dock ringa bar resulterar i en Skrivfel.

Hantera lyftning

Att vara medveten om hissning och de potentiella fel som kan uppstå om de hanteras fel kan spara dig många timmar av felsökning. Här är några sätt du kan hantera hissningar.

Deklarera variabler inuti funktioner

Deklarera variabler i funktionerna som kommer åt dem. Du kommer inte alltid att kunna göra detta, eftersom du kan behöva en global variabel som du kan komma åt inom flera funktioner. Så se till att du bara deklarerar variabler globalt om du verkligen behöver.

Deklarera variabler Med let eller const

Du bör alltid använda let och Const nyckelord i stället för var nyckelord när variabler deklareras. Denna praxis är fördelaktig när du deklarerar lokala variabler i en funktion. Att veta de rätta sätten att deklarera variabler i JavaScript minskar risken för fel orsakade av hissning i din kod.

Deklarera variabler i toppen av deras omfattning

Deklarera alla dina variabler högst upp i deras respektive omfång, före alla andra påståenden. Om du gör det kommer JavaScript-kompilatorn inte att behöva hissa dessa variabler för att komma åt dem.

Använder strikt läge

Strikt läge är ett JavaScript-läge som reglerar dålig syntax, optimerar körtiden för din kod och förbjuder missbruk av JavaScripts löst skrivna syntax genom att skapa fel vid kompilering.

Till exempel, i "slarvigt läge", på grund av hissning, kan du komma åt en variabel utanför den initierade funktionen, även om den inte deklarerades:

myFunction();
trösta.log (foo); // 20

fungeramyFunction() {
foo = 20;
}

I kodblocket ovan deklarerar JavaScript automatiskt foo och hissar den till toppen av det globala scopet, ignorerar scopet du initierade det i.

Du kan använda strikt läge för att fixa detta beteende och skapa ett fel om du försöker komma åt variabeln utanför dess funktionsomfång.

Strikt läge slutar inte lyfta helt och hållet. Istället förhindrar den de mest förvirrande och felbenägna formerna av hissning. Det är fortfarande viktigt att förstå det allmänna konceptet och reglerna bakom hissning, även när du använder det strikta skyddsnätet.

För att välja strikt läge på global nivå, deklarera syntaxen överst i din skriptfil:

"använda sig avsträng"; // eller 'använda sig avsträng'

För att välja strikt läge på en funktionsnivå, deklarera syntaxen överst i en funktionskropp före eventuella satser:

fungeramyStrictFunction() {
"använda sig avsträng";
}

Om du deklarerar strikt läge på en funktionsnivå kommer inställningen endast att gälla för satser i den funktionen.

Att deklarera strikt läge på global nivå förhindrar att variabler nås utanför deras respektive omfång:

"använda sig avsträng";
myFunction();
trösta.log (foo); // ReferenceError: foo är inte definierad

fungeramyFunction() {
foo = 20;
}

Med strikt läge aktiverat kommer JavaScript-kompilatorn att hissa myFunction() till toppen av sitt omfång utan den odeklarerade variabeln.

Förstå vad som påverkar lyftning

Hissning är ganska unikt för JavaScript och kan vara ett mycket förvirrande beteende att linda huvudet runt. Det kan påverka variabler och funktioner, men det finns sätt att förhindra det om du behöver.

Flera faktorer kan påverka hissningen, så det är bäst att undvika varje förekomst av variabel eller funktionslyftning i din kod.