Ausschnitt eins:
function a() {
alert('A!');
function b(){
alert('B!');
}
return b(); //return nothing here as b not defined a return value
}
var s = a(); //s got nothing assigned as b() and thus a() return nothing.
alert('break');
s(); // s equals nothing so nothing will be executed, JavaScript interpreter will complain
Die Anweisung 'b ()' bedeutet, die Funktion 'b' auszuführen, die ein Dialogfeld mit dem Text 'B!' zeigt.
die Aussage 'return b ();' bedeutet, eine Funktion mit dem Namen 'b' auszuführen und dann zurückzugeben, welche Funktion 'b' zurückgibt. aber 'b' gibt nichts zurück, dann gibt diese Anweisung 'return b ()' auch nichts zurück. Wenn b () eine Zahl zurückgibt, ist 'return b ()' auch eine Zahl.
Jetzt wird 's' der Wert von 'a ()' zurückgegeben, was 'b ()' zurückgibt, was nichts ist, also ist 's' nichts (in JavaScript ist es tatsächlich eine Sache, es ist eine 'undefinierte'. Also Wenn Sie JavaScript bitten, den Datentyp 's' zu interpretieren, teilt Ihnen der JavaScript-Interpreter mit, dass 's' undefiniert ist.) Da 's' undefiniert ist, wenn Sie JavaScript bitten, diese Anweisung 's ()' auszuführen, Sie fordern JavaScript auf, eine Funktion mit dem Namen 's' auszuführen, aber 's' ist hier eine 'undefinierte', keine Funktion, daher beschwert sich JavaScript: "Hey, s ist keine Funktion, ich weiß nicht wie Um dies zu tun s ", wird eine Fehlermeldung" Uncaught TypeError: s ist keine Funktion "von JavaScript angezeigt (getestet in Firefox und Chrome).
Snippet Zwei
function a() {
alert('A!');
function b(){
alert('B!');
}
return b; //return pointer to function b here
}
var s = a(); //s get the value of pointer to b
alert('break');
s(); // b() function is executed
Jetzt gibt die Funktion 'a' einen Zeiger / Alias auf eine Funktion mit dem Namen 'b' zurück. Wenn also 's = a ()' ausgeführt wird, erhält 's' einen Wert, der auf b zeigt, dh 's' ist jetzt ein Alias von 'b'. Der Aufruf von 's' entspricht dem Aufruf von 'b'. dh 's' ist jetzt eine Funktion. Execute 's ()' bedeutet, dass die Funktion 'b' ausgeführt wird (wie beim Ausführen von 'b ()'), einem Dialogfeld mit 'B!' wird angezeigt (dh Ausführen der 'alert (' B! '); Anweisung in der Funktion' b ')