2016-09-27 3 views
2

Ich habe diesen Code:Javascript-Funktion als Argument nicht Wirksam

var point = 2; 
var change = function(){point = 5}; 

function makeChange(point,change){ 
    change(); 
    alert(point); 
} 

makeChange(point,change); 

Die Idee ist, dem Benutzer die Möglichkeit zu geben, eine Bedingung für den Wert von point zu passieren, bevor es in der Funktion. Aber es wird nicht wirksam. Wenn ich alert(point) in die change Funktion hinzufüge, warnt es 5, aber warnt dann 2 in der makeChange Funktion.

+0

Sie können eine Variable in einer Funktion übergeben ändern und beeinflussen haben das „Original“ Variable – vlaz

+1

Mögliche Duplikat von [Geht Javascript als Referenz?] (http://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference) – vlaz

+0

Beachten Sie, dass der lokale Parameter 'point' und die globale Variable' point' zwei sind verschiedene Variablen.Sie alarmieren den lokalen 'Punkt' in' makeChange'. Ändern Sie einfach den Namen Ihres ersten Parameters in etwas anderes als "Punkt". –

Antwort

0

Das Problem ist wegen Ihrer Parameter den gleichen Namen wie die globale Variable point mit. Im folgenden Code:

var point = 2; 
var change = function(){point = 5}; 

function makeChange(point,change){ 
    change(); 
    alert(point); 
} 

Der Aufruf von change() innerhalb makeChange der lokalen Parameter point hier definiert zuweisen makeChange(point,change)-5. Nicht das globale point, das als 2 bleiben wird.

Eine einfache Möglichkeit, dies zu lösen, ist die Verwendung des gleichen Namens point im Parameter als globale Variable. Ansonsten aufgrund Scoping JavaScript denken Sie nehmen die lokal definierten point innen makeChange:

var point = 2; 
 
var change = function(){point = 5}; 
 

 
function makeChange(Point,Change){ 
 
    Change(); 
 
} 
 

 
makeChange(point,change); 
 
alert(point);

0

Sie können so etwas tun, wenn Sie die Funktion aufrufen.

makeChange(point,function(){return change}) 
1

Sie können Punkt ändern zurückkehren()

var point = 2; 
var change = function(){ return point=5; }; 

function makeChange(point,change){ 
alert(change); 
} 

makeChange(point,change()); 
+0

Ich verstehe nicht. Was ist der "Punkt", an dem "Punkt" in "makeChange" übergeben wird? –

+0

Was ist dann Verwendung von Initialisierungspunkt an diesem Punkt? Punkt = 5; – Bharat

+0

Benutzer möchte den Punkt Wert ändern() .. so habe ich gerade das – sheetal

0

Ihr Code tut gut - in der Tat, wenn Sie ein tun alert(point); direkt nach makeChange(point,change); Sie werden sehen, dass 5 zurückgegeben.

Das verwirrende Bit ist, dass die Zahl (nämlich 2) in die makeChange-Funktion durch Wert anstelle der Referenz (nämlich Punkt) übergeben wird. Wenn Sie also pointinnerhalbmakeChange alarmieren, wird der ursprünglich übergebene Wert gegeben: 2.

0

Ich denke, das Problem mit diesem Code ist die Verwirrung zwischen lokalen und globalen Variablen.

Also, wenn Sie Variable übergeben in der Funktion makeChange (Punkt, ändern) verhält es sich wie lokale Variable für die Funktion makeChange jetzt in der nächsten Zeile, wenn Sie die Änderungsfunktion ihren globalen Wert ändern. und dann, wenn Sie Alert, da in Funktion Priorität ist lokale Variable, so dass Sie bekommen 2.

Sie können Rückholverfahren für die gleiche verwenden.

var point = 2; 
var change = function(){point = 5 return(point)}; 

function makeChange(point,change){ 
    point=change(); 
    alert(point); 
} 

makeChange(point,change);