Jaka jest różnica między implementacją funkcji anonimowych wykonujących się samodzielnie (inaczej IIFE)
W wielu książkach /Posty na blogu samo wywołujący wzór funkcji anonimowej jest napisany w ten sposób:
(function() {
var foo = 'bar';
})();
Jednak działaJSLint na tym pojawia się ten błąd:
Przenieś wywołanie do parenów zawierających funkcję.
na przykład zmiana na to działa:
(function() {
var foo = 'bar';
}());
pytania
Dlaczego pierwsza implementacja nie jest wystarczająco dobra dla JSLint? Jakie są różnice?Jaka jest preferowana forma? czy JSLint ma zawsze rację?Dlaczego to działa? po wszystkimfunction(){}()
rzuca aSyntaxError: Unexpected token (
Ale zawinięcie go w pareny sprawia, że to nagła praca? na przykład(
function(){}()
) - działa w porządku(Przecież to jest JavaScript, nie Lisp, więc jaki jest efekt zawijania parens na błąd składni z innego powodu?)
EDYTOWAĆ: jest to coś w rodzaju kontynuacji (nie powiedziałbym jednak dokładnego duplikatu):Błąd JSLint: „Przenieś wywołanie do parenów zawierających funkcję”, więc moje główne pytanie brzmi # 3, dlaczego w ogóle działa?