2017-05-22 6 views
1

Bitte akzeptieren Sie meine Entschuldigung für einen Anfänger in JS. Ich hörte auf, JS in einem Punkt zu untersuchen, was die richtige Antwort dessen ist, was in einer Funktion passiert, wenn Argumente übergeben werden, lassen Sie uns das Code-Snippet beschreiben.Was passiert, wenn wir Argumente innerhalb der Funktion übergeben?

function myFun(x){ 
    console.log(arguments); 
    console.log(x); 
} 
myFun(1); 

gemäß dem obigen Beispiel ist die richtige Aktion geschehen ist:

Beispiel 1

when passing calling myFun(1) this will do : 
    function myFunction(x){ 
    var x = 1 
    } 

OR Beispiel 2

function myFunction(x,y,z){ 
    x=arguments[0]; 
    y=arguments[1]; 
    z=arguments[2]; 
    } 

nach den main documentation, ich nicht den gewünschten Ansatz gefunden habe, was ich in Argumenten gefundene Objekt ist Erstellungsprozess, dass:

Repeat während indx> = 0, val das Element der args seines Let bei 0-Ursprungsposition Indx.

, die ich nicht im Zusammenhang mit dem Prozess der Zuordnung der Werte angeben konnte oder nicht.

So nach überhaupt oben,

welche Lösung ist die richtige? Wie werden Parametern Parameter zugewiesen? Wenn wir den Wert 1 als Argument übergeben haben, wird im Funktionsumfang 1 entweder x zugewiesen oder 1 wird den Argumenten Objekt zugewiesen.

+0

was ist Ihre Frage? –

+0

Es gibt eine Menge Verwirrung in dem Kommentar-Thread, den Sie verlinkt haben, und es klingt, als ob Sie von allem verwirrt sind. Es gibt keine "Zuweisung", nur Argument übergeben. –

+0

@NiettheDarkAbsol: Ich werde diesen Punkt bearbeiten – youhana

Antwort

0

Angenommen, Sie haben eine Funktion wie dieses:

function oneParam(x) 
{ 
    console.log(arguments[0]); 
    console.log(x); 
} 

aufrufen es etwa so: oneParam(1); den ersten Parameter übergeben setzen wird, in die Argumente Array. Wenn Sie den obigen Code ausführen, erhalten Sie den gleichen Wert zweimal gedruckt, da sie identisch sind.

1

1


Lassen Sie uns jetzt eine Funktion mit mehreren params nehmen:

function myFunction(x,y,z) 
{ 
    console.log(arguments[0], arguments[1], arguments[2]); 

    x=arguments[0]; 
    y=arguments[1]; 
    z=arguments[2]; 

    console.log(x, y, z); 
} 

Sie bemerken, dass wie diese myFunction("a","b","c"); Aufruf dieser Funktion wird zwei ähnliche Ausgänge.

a b c

a b c

So im Wesentlichen sind beide Szenarien korrekt. Kommt nur darauf an, was Sie beim Aufruf der Funktion übergeben haben.


Edit: Um zu klären, Objekt die Argumente alle params haben, werden Sie in vergangen Diese params werden, um zu benannten Variablen zugewiesen werden, dass es in der Funktionssignatur..

So können Sie sogar oneParam(1, 2, 3); haben und das Argument-Objekt wird alle drei Parameter haben, aber nur der erste Parameter 1 wird der Funktionsvariablen x zugewiesen.

fiddle here

+0

also ermutigen Sie das zweite Beispiel in der Post erwähnt? – youhana

+0

Sie müssen die Werte des arguments-Objekts nicht manuell Ihren vars zuweisen. Es wird automatisch gemacht. Ich habe es gerade getan, um dir zu zeigen, was hinter den Kulissen passiert. – john

+0

Also im Wesentlichen, kümmern Sie sich nicht mit dem zweiten, gehen Sie einfach mit dem ersten. – john

0

Wenn Sie nennen Argumente in Ihrer Funktion wie folgt aus:

function myFunction(x,y,z) 
{ 
    console.log(x, y, z); 
} 

dann ist es besser, sie direkt mit ihrem Namen zuzugreifen.
Sie können argumens verwenden, wenn Sie die Anzahl der Argumente bei der Definition der Funktion nicht kennen, wie zum Beispiel Math.max().

ES6 verwendet Argumente etwas einfacher als zuvor, aber es ist ziemlich ähnlich. Denken Sie daran, dass argumentskein Array ist, daher muss es in ein Array konvertiert werden, wenn Sie Zugriff auf alle Methoden des Arrays haben möchten.

function myFunc_ES6() { 
    var args = [...arguments]; 
    // or 
    //var args = Object.values(arguments) 

    args.forEach(arg => console.log(arg)); 
} 

function myFunc_ES5() { 
    var args = Array.prototype.slice.apply(arguments); 

    args.forEach(function(arg) { 
     console.log(arg); 
    }); 
} 

myFunc_ES6(1,2,3,4); 
myFunc_ES5(6,7,8,9); 
0

Die Argumente Objekt JavaScript-Funktionen haben ein eingebautes Objekt die Argumente Objekt aufgerufen.

Das Argument-Objekt enthält ein Array der Argumente, die verwendet werden, wenn die Funktion aufgerufen (aufgerufen) wurde.

als

arguments können in https://www.w3schools.com/js/js_function_parameters.asp angegeben verwendet werden, wenn Sie wollen nicht explizit die Parameter einer Funktion angeben. Dies kann in vielen Situationen nützlich sein. Eg.

anderes Verhalten auf verschiedenen Argumenten zählen

function foo() { 
    if(arguments.length == 2){ 
    // do something 
    }else{ 
    //do something else 
    } 
} 

einige Methode verlauf

var oldMethod = Object.prototype.method; 
Object.prototype.method = function() { 
// some extended functionality 
// then call the original 
oldMethod.apply(this, arguments); 
} 

arbeitet mit unbekannten Anzahl von Argumenten

function average(){ 
    var i, s=0; 

    if(!arguments.length){ 
    throw('Division by zero.'); 
    } 

    for(i=0;i<arguments.length;i++){ 
    s+=arguments[i]; 
    } 
    return s/arguments.length; 
} 

die Art und Weise in Bezug auf die Werte zugewiesen bekommen, wenn wir eine Funktion:

function foo(x){} 

egal, was Sie als Parameter thiswill wahr sein passieren:

x === arguemnts[0] 

Es ist fast so, als ob x in den Argumenten stan - dial referenziert ist, weil die Bearbeitung von Argumenten auch die Referenzen ändert:

arguments[0]++; 
x === arguments[0] // true 

Löschen jedoch die Argumente [0] wird den expliziten Parameterwert nicht ändern

delete arguments[0] 
x !== undefined 
Verwandte Themen