2016-03-21 5 views
2

Die folgende JS Code verhält sich seltsam:Warum behalten Parameter ihren Wert nicht außerhalb einer Funktion?

var c = 0; 
var a = 0; 
myTest(8, 5); 

function myTest(a,b) { 
    console.log(a); 
    a++; 
    c++; 
    console.log(a); 
    return a; 
} 

console.log(a); 
console.log(c); 

https://jsfiddle.net/hwns1v4L/

Wenn ich aus der Funktion der "a" Parameter nehmen, "ein" wird um 1 erhöht und die dritte Konsole Log-Returns "a" als 1. Völlig normal. Aber wenn ich das "a" als Parameter in der myTest-Funktion (wie im obigen Code) behalte, erhält es einen Wert von 8, in Schritten von 1 bis 9, und das dritte Konsolenprotokoll gibt eine Null zurück.

Was ist die Erklärung für dieses seltsame Verhalten? Es tut mir leid, wenn dies in einem anderen Thread erklärt wird; Ich bin zu neu für JS, um wirklich gute Google-Abfragen zu erstellen oder erweiterte Antworten zu verstehen.

+0

JavaScript ist nach Wert, wie die meisten anderen Sprachen. Dieses "seltsame" Verhalten ist sehr häufig. https://en.m.wikipedia.org/wiki/Evaluation_strategy –

Antwort

3

Was für dieses seltsame Verhalten ist die Erklärung?

Da in Javascript Variablen sind Funktionsbereich.

Sie haben nie a und b zu myTest Methode übergeben. Sie bestanden 8 und 5, so a und b, die Teil der myTest Signatur wurden, bekam neuen Umfang. a wurde 8 und b wurde 5 innerhalb myTest.

Werte von a und b innerhalb myTest werden nicht im Freien verwendet, da ihr Geltungsbereich auf myTest beschränkt ist.

+0

Ich gebe jedoch 'a' zurück. Wenn im Rahmen der Funktion 'a' 8 oder 9 ist, wie kommt es dann, wenn es zurückgegeben wird, ist es immer noch 0? –

+0

@BarAkiva Sie haben einen Wert zurückgegeben, keine Variable. Du hast 'a = myTest (8,5) 'nicht gemacht, also wird a keinen neuen Wert haben. – gurvinder372

1

In Ihrer Funktion haben Sie einen lokalen a Parameter. Alle Änderungen, die Sie an diesem Wert vornehmen, spiegeln nicht Ihre global definierte a wider. Da Sie innerhalb der Funktion keine c Variable oder Parameter erstellt haben, ändern Sie den globalen Wert c.

var c = 0;    // Global c 
 
var a = 0;    // Global a 
 
var b = myTest(8, 5); // Store the value of the local a from the function return. 
 

 
function myTest(a,b) { 
 
    console.log(a); // This a is a local reference (8) 
 
    a++;    // Increment local a 
 
    c++;    // Increment global c 
 
    console.log(a); // Print local a    (9) 
 
    return a;   // Return local a 
 
} 
 

 
console.log(a);  // Print global a    (0) 
 
console.log(c);  // Print global c    (1) 
 
console.log(b);  // Print returned value  (9)

+0

OP gibt nicht einmal 'a' und 'c' als Parameter – Hacketo

Verwandte Themen