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
})();
Задание 1

Päätä, ajamatta koodia, mitä tulostetaan konsoliin:

javascriptlet str = 'str';

(function() {
  console.log(1);
})();
Задание 2

Päätä, ajamatta koodia, mitä tulostetaan konsoliin:

javascriptlet str = 'str'

(function() {
  console.log(1);
})();