Puolipiste turvallisuudessa IIFE:ssä
Olkoon nyt välittömästi kutsuttava funktiomme ei plus-merkillä alussa, vaan ympäröity pyöreillä suluilla, näin:
(function() {
console.log(1); // tulostaa 1
})();
Olkoon muuttuja num määritelty funktion
ulkopuolella:
let num = 1; // puolipiste on
(function() {
console.log(num); // tulostaa 1
})();
Oletetaan nyt, että unohdimme laittaa puolipisteen:
let num = 1
(function() {
console.log(num); //!! antaa virheen
})();
Käy ilmi, että tällainen koodi antaa virheen, koska JavaScript tulkitsee funktiomme ensimmäisen rivin komennon jatkoksi.
Välttääksesi tällaiset ongelmat, ennen välittömästi kutsutun funktion kutsumista on aina asetettava puolipiste, näin:
let num = 1
;(function() {
console.log(num); // tulostaa 1
})();
Vaikuttaa siltä, että ongelma on hieman keksitty. Itse asiassa näin ei ole. Voi olla tilanne, että sivullasi liitetään useita skriptejä erillisistä tiedostoista. Tällöin yhden tiedoston lopussa voi olla puuttuva puolipiste ja tämä johtaa automaattisesti ongelmaan, jos toinen tiedosto alkaa välittömästi kutsutulla funktiolla.
Siksi, aina-aina laita puolipiste ennen välittömästi kutsutun funktion kutsua, vaikka olet tällä hetkellä varma, että ongelmia ei tule. Ne voivat ilmaantua myöhemmin.
Sovelletaan yllä olevaa ja kutsutaan funktiota välittömästi, laittamalla alkuun puolipiste:
;(function() {
console.log(1); // tulostaa 1
})();
Päätä, ajamatta koodia, mitä tulostetaan konsoliin:
let str = 'str';
(function() {
console.log(1);
})();
Päätä, ajamatta koodia, mitä tulostetaan konsoliin:
let str = 'str'
(function() {
console.log(1);
})();