Well in Javascript können Sie denken, dass, Bereiche meine geschweiften Klammern definiert: {
Und }
, und innerhalb eines Bereichs Variablen neu definiert werden kann, so sehen:
function x(){
var name=3;
var name=4;
console.log(name); // output is: 4
}
x();
Aber das ist nur die halbe Wahrheit, Tatsächlich passiert der Interpreter den Code und verschiebt alle var
-Anweisungen an den Anfang, während ihnen eine undefined
zugewiesen wird (und alle Argumente werden definiert und aus dem Stack übernommen), und dann wird der von Ihnen geschriebene Code ausgeführt. Also alle var
nach dem ersten wird einfach ignoriert. Und der Code, den Sie schrieben, ist gleich:
function mytask(name,title){
var name = arguments[0];
var title = arguments[1];
name = name;
title = title;
var showalert = ("Hi " + name + " your job title is " + title);
console.log(showalert);
return showalert;
}
document.write(mytask("dan", "administrator"));
So ist Ihre erneute Verzögerung und Zuweisung redundant. Wie auch immer - der Umfang ändert sich nicht, nichts wird anders sein.
bearbeiten
Der Interpreter Ihren Code übergeht, mit etwas ausführt, wird jede var x = y;
Anweisung aufgeteilt in var x = undefined;
und x=y;
. Und die var x = undefined;
wird an den Anfang des Codes verschoben. Und die x=y;
wird an der gleichen Stelle wie die ursprüngliche Aussage sein. Wenn Sie die Dinge über den Stack nicht verstanden haben, kümmern Sie sich nicht darum, wie Compiler Funktionsaufrufe in Assembly konvertieren - es ist es wert zu wissen, falls Sie Zeit haben; aber nicht die wichtige Sache hier.
Wie auch immer - direkt nach diesen Änderungen, und vielleicht einige Optimierungen vorgenommen werden, wird der resultierende Code ausgeführt. Dies ist nicht der Code, den du geschrieben hast, sondern ein gleicher. Was Sie bei der Neudefinition der Argumente angegeben haben, ist ein Kantenfall, bei dem diese Transformationen sichtbar werden.
Wenn Sie könnten, wie würden Sie auf jeden von ihnen beziehen? – cheeken
Sie meinen, können Sie die Named-Argumente, die Sie an die Funktion als die Variablennamen in der Funktion übergeben? Ja, ja, du kannst. Hast du überhaupt ein Problem damit erlebt? –
Der Code funktioniert. Ich möchte dies jedoch nicht beibehalten. –