Hallo,
$(function() {
$("#ul1 > li").click(function(li) {
var url = $(li).find("a").attr("href");
document.window.location.href = url;
});
});
> >
> > Wie nennt man diese Schreibweise einer Funktion?
>
> Immediately Invoked Function Expression (IIFE), hier die jQuery-Notation davon.
Das ist keine Immediately-Invoked Function, was man daran erkennt, dass sie nicht immediately invoked wird. ;) Dazu fehlt der Call-Operator.
> > Was ist der Unterschied zwischen
> >
> > `function whatever() {}`{:.language-javascript}
> >
> > und
> >
> > `$(function() {});`{:.language-javascript}
>
> ... und der Variante ohne jQuery
>
> `(function() {}) ();`{:.language-javascript}
>
> Beispiel 1 definiert eine Funktion mit einem Namen, die durch Angabe ihres Namens und eines Klammernpaares (ggf. mit Parameterliste) bei Bedarf aufgerufen wird. Beispiel 2 und 3 definieren eine anonyme (namenlose) Funktion, die im jQuery-Fall wegen des umschließenden $(), im anderen Fall durch die angehängten Funktionsklammern sofort nach der Deklaration aufgerufen wird.
Das gilt für Beispiel 2, nicht für Beispiel 3.
$(fn) ist äquivalent zu [$(document).ready(fn)](http://api.jquery.com/ready/). Es registriert in neueren Browsern einen Handler für den Event [DOMContentLoaded](https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded) bei document. Da DOMContentLoaded bereits gefeuert worden sein kann, wird mit document.readyState geprüft, ob das DOM bereits zur Verfügung steht.
<http://www.w3.org/TR/html5/dom.html#dom-document-readystate>
<http://www.w3.org/TR/html5/dom.html#current-document-readiness>
Falls ja, wird die übergebene Funktion sofort ausgeführt (um genau zu sein: asynchron bei der nächsten Gelegenheit). Insofern verhält sich der Code ähnlich zu einer IIFE. Das ist ein netter Nebeneffekt. Aber in erster Linie geht es hier darum, Code beim »DOM-ready« auszuführen.
Siehe auch
<https://github.com/jquery/jquery/blob/master/src/core/ready.js>
Mathias
--
[Chaplin.js - JavaScript application architecture](http://chaplinjs.org/)