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?

questionAnswers(2)

yourAnswerToTheQuestion