Samannimiset muuttujat funktioissa JavaScriptissä
Olkoon sekä funktion ulkopuolella että sisällä muuttuja
num. Tässä tapauksessa minkä tahansa muutokset
paikalliseen muuttujaan num eivät vaikuta
millään tavalla globaaliin muuttujaan num:
let num = 1; // globaali muuttuja
function func() {
let num = 2; // paikallinen muuttuja
console.log(num);
}
func(); // kutsutaan funktiota, tulostaa 2
console.log(num); // tulostaa 1 - globaali muuttuja ei muuttunut
Mutta jos unohdamme esitellä paikallisen muuttujan
num avulla let, funktion sisälle
ei synny paikallista muuttujaa num,
vaan muuttuu vain globaali muuttuja:
let num = 1;
function func() {
num = 2; // unohdettiin kirjoittaa let - muutetaan ulkoista muuttujaa
console.log(num);
}
func(); // kutsutaan funktiota, tulostaa 2
console.log(num); // tulostaa 2 - muuttuja muuttui
Tässä voi olla kaksi tilannetta: joko me todella
halusimme muuttaa globaalia muuttujaa (silloin
kaikki on kunnossa), tai unohdimme let ja vahingossa
muutimme globaalin muuttujan.
Jälkimmäinen tapaus on vaikeasti havaittava virhe,
joka johtaa skriptin arvaamattomaan käyttäytymiseen.
Sen vuoksi aina, kun otat käyttöön uuden muuttujan, esittele
se aina let:llä.
Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:
let num = 1;
function func() {
num = 2;
}
func();
console.log(num);
Päätä, käyttämättä koodia, mitä tulostetaan konsoliin:
let num = 1;
function func() {
let num = 2;
}
func();
console.log(num);