n'Abend,
Wann bringt es Vorteile, Funktionen so zu schreiben?
Wenn man globale Variablen um jeden Preis vermeiden möchte, etwa weil sie mit anderen Scripten kollidieren könnten.
Werden Variablen, die ich in einer Funktion speichere, Global?
ja, wenn sie ohne das Schlüsselwort "var" erzeugt werden. Sonst nicht.
// bsp. 1
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});// bsp. 2
function checkclick() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
}
>
> Ist „url“ im 2. Bsp. Global, wenn ich es so schreibe? Ich ging davon aus, dass Variablen Global werden, wenn ich das „var“ vor dem Variablennamen weglasse?
Du liegst richtig, url ist in beiden Beispielen global. Aber der Unterschied ist, dass der Code der anonymen Funktion in Beispiel 1 \*sofort\* ausgeführt wird, der in Beispiel 2 erst, wenn die Funktion ausdrücklich aufgerufen wird. Du müsstest also eigentlich dein Beispiel 1 mit einer Variante \*ohne\* Kapselung in einer Funktion vergleichen.
~~~javascript
// Code-Block 1
(function()
{ var x1 = 42;
// ...
// irgendwelcher Code
}) ();
// Code-Block 2
var x2 = 24;
// ...
// irgendwelcher Code
Sowohl Block 1 als auch Block 2 werden sofort ausgeführt, wenn das Dokument bzw. das Script geparst wird. Aber x1 ist lokal in einer Funktion gekapselt, also global nicht sichtbar. Dagegen liegt x2 im globalen Scope (es ist automatisch eine Eigenschaft des window-Objekts), weil es nicht gekapselt ist.
Müsste ich, wenn ich bspw. Klicks mit Anonymen Funktionen überwache, noch auf „Document Ready“ warten, wenn meine Scripte eh am ende von body stehen?
Nein. Wenn du sie aber im head-Element notierst, oder relativ weit "oben" im body, dann schon. Wichtig ist, dass das Element, dessen Ereignisse du überwachen willst, zu dem Zeitpunkt schon existiert.
So long,
Martin
Chef: Zum vierten Mal in dieser Woche erwische ich Sie nun schon beim Zuspätkommen. Was haben Sie dazu zu sagen?
Angestellter: Dann muss heute Donnerstag sein.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(