Proste, dlaczego niektóre pliki js (takich jak Ember lub jquery.js) zacząć (function() {...})();
?Dlaczego niektóre js pliki zacząć (function() {
Odpowiedz
Kod formularza (function() { /* code here */ })()
jest znany jako "Wyrażenie funkcji natychmiastowego wywołania". Jest często używany do konfigurowania zamknięcia, więc możesz definiować zmienne bez zanieczyszczania zasięgu globalnego. Znajdziesz go w Ember, jQuery i prawie we wszystkich innych "wtyczkach" z tego powodu. Zanieczyszczenie zasięgu globalnego jest generalnie złym pomysłem, ale z wtyczkami, które muszą działać we wszystkich witrynach, szczególnie ważne jest upewnienie się, że przypadkowo nie zastąpi on zmiennej używanej przez twórcę witryny.
Oczywiście istnieją inne zastosowania. Na przykład, może on być stosowany do „kotwicy” zmiennej iteracji, tak:
for(i=0; i<links.length; i++) {
(function(i) {
links[i].onclick = function() {alert(i);};
})(i);
}
// without the IIFE, all links would alert the value of links.length instead.
Istnieją również przypadki, że od czasu do czasu korzystają IIFEs że większość ludzi prawdopodobnie Lynch mnie, takie jak „just-in -time”obliczenia:
if((function() {
var party=document.getElementById('party').children, l=party.length, i, r=0;
for(i=0; i<l; i++) if(party[i].children.length > 0) r++;
return r;
})() == 6) {
// your Party is full
}
powyższy byłoby znacznie lepiej, gdyby zostały obliczone przed skokiem do rachunku if
, więc ... nie rób tak jak ja na ten jeden!
Składnia rozpoczął
(function(){
/* code */
}());
wie jak natychmiast powołać anonimową funkcję, która wykonuje natychmiast po ostatniej linii kodu używany do określania zakresu zmiennych innych funkcji
więcej:.. http://en.wikipedia.org/wiki/Immediately-invoked_function_expression
- 1. Dlaczego używać (function() {....}());
- 2. Dlaczego niektóre pliki DLL wymagają dodatkowego pliku .lib do połączenia?
- 3. Dlaczego niektóre pliki nie zostały opublikowane w folderze App_Data?
- 4. Git: zignoruj niektóre pliki podczas scalania (zachowaj niektóre pliki ograniczone do jednego oddziału)
- 5. .jsm vs .js pliki
- 6. JS RegEx, aby dopasować tylko niektóre wzorce.
- 7. Dlaczego moje pliki .js uruchamiane są w gedit z Eclipse?
- 8. Dlaczego nie możemy trywialnie skopiować std :: function
- 9. Gitignore wykluczyć niektóre pliki we wszystkich podkatalogach
- 10. Dlaczego VIM podkreśla niektóre słowa?
- 11. Dlaczego niektóre (1) .getOrElse (niektóre (1)) nie typu Opcja [Int]?
- 12. Konwertowanie funkcji boost :: function na std :: function
- 13. tym pliki JS (jQuery) w JSPX plików
- 14. Pozostawić tylko niektóre pliki w podkatalogach z .gitignore
- 15. Porządkuj i łącz pliki JS, Google Closure?
- 16. `as.na` function
- 17. gitignore - zezwól tylko na niektóre rozszerzenia i pliki
- 18. Dobre kodowanie: modularne pliki js lub jeden duży plik js?
- 19. Angular JS: dynamicznie ładuj pliki CSS i JS
- 20. jquery: jak dołączyć inne pliki .js do .js
- 21. git svn pobrać: nie mógł unmemoize function `check_cherry_pick”, ponieważ nie został memoized zacząć
- 22. Dlaczego requirejs próbuje dołączyć pliki ".js" do pliku .jst, które są załadowane wtyczką!
- 23. Jak dołączyć pliki JS Foundation 6 za pośrednictwem importu ES6?
- 24. joomla- Jak usunąć niepotrzebne pliki js strony
- 25. Gdzie umieścić pliki js w CodeIgniter
- 26. Konkluduj i zminimalizuj pliki JS w węźle
- 27. Jak należy zmienić pliki Magento Varien JS?
- 28. Dlaczego niektóre pliki MP4 nie mogą być odtwarzane za pośrednictwem HTML5?
- 29. Dlaczego istnieją pliki vcxproj.filters?
- 30. Dlaczego niektóre tablice lustrzane siebie w Powershell
Oto jedno istotne pytanie na SO: http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work. Powinno to zostać zamknięte jako duplikat. –
To pytanie nie jest duplikatem i nie ma nic z zadanym pytaniem, ponieważ zadane pytanie nie pyta, jaki jest cel zamknięcia, jak w tym poście, zamiast tego zadane pytanie zadaje pytanie, dlaczego wywołanie musi znajdować się w tym samym wierszu jako deklaracja –