Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature currently requires accessing the site using the built-in Safari browser.
Der Unterschied ist, dass Statements nicht gehoistet werden.
nur variable werden gehoistet(wenn sie nicht mit let deklariert werden)! und das sowohl bei functiondeklarations als auch bei functionexpressions, sowie allen anderen variablen. nur werden bei der functiondeklaration, die variablen auch gleich zugewiesen, weil es im gegensatz zu anderen variablen keine explizite zuweisung gibt. das passiert bei der functionexpression, wenn man den optionalen identifer angibt nur deswegen nicht, weil die expression noch nicht ausgewertet wurde. das passiert erst bei der zuweisungDer Unterschied ist, dass Statements nicht gehoistet werden.
var a = 0;
var b = 0;
var c = 0;
(function()
{
d(); // zugriff auf gehoistete und zugewiesene variable d
d = 1; // zugriff auf gehoistete und zugewiesene variable d wird überschrieben
// d(); // fehler: "not a function" d ist ab hier keine function mehr
// e(); // fehler: "not a function" e ist nur gehoistet aber nicht zugewiesen
e = 1; // zugriff auf gehoistete variable e
// f(); // fehler: "not defined" f ist noch nicht bekannt, da die expression noch nicht ausgewertet wurde
// f = 1; // fehler: "not defined" f ist noch nicht bekannt, da die expression noch nicht ausgewertet wurde
a = 1; // zugriff auf gehoistete variable
// b = 1; // Fehler, b wird nicht gehoistet
c = 1; // zugriff auf globale variable
var a = 2;// hier erfolgt die zuweisung
let b = 2;// hier erfolgt die zuweisung
function d() // hier gibt es keine zuweisung
{
alert("d: gehoistet");
}
// d(); // fehler: "not a function" d wurde oben überschrieben
var e = function f() // hier erfolgt die zuweisung auf d und damit wird die expression ausgewertet und e erzeugt
{
//
}
})();
alert(a); // a wurde nicht verändert, da oben in der funktion auf die gehoistete variable zugegriffen wurde
alert(c); // c wurde verändert, da oben in der funktion auf die globale variable zugegriffen wurde
function xxx()
{
// beliebige Statements ...
function yyy() // functiondeklaration, hier erlaubt
{
// ...
}
// beliebige Statements ...
{ // Block statement, if, for, ...
function zzz() // das ist in js eigentlich überhaupt nicht erlaubt, weil weder eine functiondeklaration
// noch eine functionexpression welche mit function beginnt hier erlaubt ist.
// die meisten js-engines tolerieren das aber
{
// ...
}
}
}
// ...
{
function() // das geht nicht
{
// ...
}();
}
// aber in jeder anderen expression kannst du sie verwenden
{
var a = function() {return 1;}() + function() {return 2;}();
// oder
if (function() {return 1;}())
{
}
// oder den fall von oben nur gekapselt
(function()
{
// ...
})();
}