Jest tu kilka rzeczy. Pierwszym z nich jest immediately invoked function expression (Iife) wzór:
(function() {
// Some code
})();
Zapewnia to sposób na wykonanie kodu JavaScript w swoim własnym zakresie. Zwykle jest używany tak, aby wszelkie zmienne utworzone w funkcji nie miały wpływu na zasięg globalny. Zamiast tego możesz użyć tego:
function foo() {
// Some code
}
foo();
Wymaga to podania nazwy funkcji, która nie zawsze jest konieczna. Użycie nazwanej funkcji oznacza również, że w pewnym przyszłym punkcie funkcja może zostać ponownie wywołana, co może nie być pożądane. Używając anonimowej funkcji w ten sposób, upewniasz się, że jest ona wykonywana tylko raz.
Ta składnia jest nieprawidłowy:
function() {
// Some code
}();
Bo trzeba zawinąć funkcji w nawiasach w celu uczynienia go analizować jako wyraz. Więcej informacji znajduje się tutaj: http://benalman.com/news/2010/11/immediately-invoked-function-expression/
Tak szybko zakręcić na wzór Iife:
(function() {
// Some code
})();
pozwala „jakiegoś kodu” być wykonywane natychmiast, jakby to było tylko napisane inline, ale również we własnym zakresie aby nie wpływać na globalną przestrzeń nazw (a tym samym potencjalnie ingerować w inne skrypty lub ingerować w nią).
można przekazywać argumenty do funkcji tak samo jak normalna funkcja, na przykład,
(function(x) {
// Some code
})(1);
więc jesteśmy przekazując wartość „1” jako pierwszy argument do funkcji, która odbiera go jako zmienna o zasięgu lokalnym o nazwie x.
Po drugie, masz odwagę kodu funkcji samego:
delete x;
return x;
Operator delete usunie właściwości z obiektów. Nie usuwa zmiennych. Więc;
var foo = {'bar':4, 'baz':5};
delete foo.bar;
console.log(foo);
Wyniki w tym są rejestrowane:
{'baz':5}
Natomiast
var foo = 4;
delete foo;
console.log(foo);
zarejestruje wartość 4, ponieważ foo jest nie zmienna właściwość i tak nie może być usunięte.
Wiele osób zakłada, że delete może usuwać zmienne, ze względu na sposób działania autoglobałów. W przypadku przypisania do zmiennej bez deklarowania go najpierw, że nie będzie faktycznie stać się zmienna, ale właściwość na globalnym obiektu:
bar = 4; // Note the lack of 'var'. Bad practice! Don't ever do this!
delete bar;
console.log(bar); // Error - bar is not defined.
tym czasie delete działa, ponieważ nie jesteś usuwanie zmiennej, ale właściwość na obiekcie globalnym. W efekcie, poprzedni fragment jest odpowiednikiem tego:
window.bar = 4;
delete window.bar;
console.log(window.bar);
I teraz można zobaczyć jak to jest analogiczne do przykładu obiektu bla bla i nie zmienna np.
To jest IIFE, szczegóły tutaj: http://www.markupjavascript.com/2016/07/what-are-immediately-invoked-function.html –