(...()) vs. ( ... ) () w zamknięciach javascript [duplikat]
To pytanie ma już odpowiedź tutaj:
Wiem, że to głupie, ale jest jakaś różnica między tym:
(function() {
var foo = 'bar';
})();
A to?
(function() {
var foo = 'bar';
}());
JSLint każe nam Move the invocation into the parens that contain the function
, ale nie widzę takiej potrzeby.
Edit: The odpowiedzi są zbyt fajne. ~function
, jshint alternatywa wraz z preferencjami jQuery dla (/***/)();
i wyjaśnieniem Crockforda! Myślałem, że dostanę odpowiedź "to to samo".
Wy wybierajcie najlepszy, a ja go zaznaczam.
3 answers
Nie ma różnicy. Oba sposoby są poprawne, aby parser JavaScript traktował twoją funkcję jako wyrażenie zamiast deklaracji .
Zauważ, że +
i !
będą również działać i są czasami używane przez minifiery do zapisywania znaków o rozmiarze:
+function() {
var foo = 'bar';
}();
!function() {
var foo = 'bar';
}();
EDIT
Jak wskazuje @copy, dla kompletności, ~
i -
również będą działać.
-function() {
var foo = 'bar';
}();
~function() {
var foo = 'bar';
}();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-08 00:54:39
To naruszenie JSLint istnieje, ponieważ Douglas Crockford twierdzi, że wersja z nawiasami zewnętrznymi wygląda jak "psie jaja".
Można go usłyszeć w ten filmik :
Myślę, że to wygląda głupio, bo mówimy o całej inwokacji, ale mamy te rzeczy wiszące na zewnątrz wyglądają jakby ... psie jaja.
Sugeruje, że nawiasy wewnątrz pomagają czytelnikowi zrozumieć , że cała wypowiedź jest wyrażenie funkcji zamiast deklaracji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-08 01:40:31
Nie, Nie wierzę, że jest jakaś różnica. Ja osobiście wolę ten pierwszy (i jQuery et. al. chyba się Zgadzam) ale oba działają identycznie w każdym silniku, który testowałem.
Również JSLint jest czasem trochę zbyt surowy. JSHint może być trochę lepszy pod tym względem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-08 00:47:55