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:
javascript(function() {
console.log(1); // tulostaa 1
})();
Olkoon muuttuja num määritelty funktion
ulkopuolella:
javascriptlet num = 1; // puolipiste on
(function() {
console.log(num); // tulostaa 1
})();
Oletetaan nyt, että unohdimme laittaa puolipisteen:
javascriptlet 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:
javascriptlet 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:
javascript;(function() {
console.log(1); // tulostaa 1
})();
Päätä, ajamatta koodia, mitä tulostetaan konsoliin:
javascriptlet str = 'str';
(function() {
console.log(1);
})();
Päätä, ajamatta koodia, mitä tulostetaan konsoliin:
javascriptlet str = 'str'
(function() {
console.log(1);
})();