Da, există diferențe între cele două.
Ambele sunt funcții anonime și se execută în același mod. Dar, diferența dintre cele două este că în al doilea caz domeniul de aplicare al variabilelor este limitat la funcția anonimă în sine. Nu există nicio șansă de adăugare accidentală a variabilelor în domeniul global.
Acest lucru implică faptul că prin utilizarea celei de-a doua metode, nu depășiți domeniul variabilelor globale, lucru bun, deoarece aceste valori ale variabilelor globale pot interfera cu alte variabile globale pe care le puteți utiliza în altă bibliotecă sau care sunt utilizate într-o bibliotecă terță parte .
Exemplu:
<html>
<body>
<script type="text/javascript">
new function() {
a = "Hello";
alert(a + " Inside Function");
};
alert(a + " Outside Function");
(function() {
var b = "World";
alert(b + " Inside Function");
})();
alert(b + " Outside Function");
</script>
</body>
</html>
În codul de mai sus, ieșirea este ceva de genul:
Hello Inside Function
Hello Outside Funcția
Funcția World Inside
... atunci veți obține o eroare deoarece "b" nu este definită în afara funcției!
Astfel, cred că a doua metodă este mai bună ... mai sigură!