2017-10-30 2 views
0
var thisfunc = function() { 
potato++; 
} 
var obj = function(myfunc) { 
    var potato = 12; 
    myfunc(); 
} 
obj(thisfunc); 
//Potato is now 13 

- (eine Art, wie ich es dachte getan werden könnte)Übergeben der untergeordneten Funktion in die übergeordnete Funktion, verwendet die untergeordnete Funktion dann die übergeordneten Funktionsvariablen?

var thisfunc = function(mypotato) { 
mypotato++; 
} 
var obj = function(myfunc) { 
    var potato = 12; 
    myfunc(potato); 
} 
obj(thisfunc); 
//Potato is now 13 

Was sind mögliche Wege für mich Kartoffel in ‚myfunc‘ zu passieren, ich bin vorbei Kartoffel unter der Annahme, nach unten in myfunc als Parameter würde es tun, aber ich hoffe, es gibt eine Möglichkeit, myfunc() kann auf seine übergeordneten Eigenschaften zugreifen, oder wäre es nicht möglich?

Antwort

0

Sie haben drei Möglichkeiten.

  1. Deklarieren Sie potato außerhalb der übergeordneten Funktion.
  2. Machen Sie potato eine globale Variable.
  3. Übergeben Sie es, wie Sie bereits demonstriert haben.
0

JavaScript hat lokale Bereiche und keine Pass-by-Reference-Aufrufe, das ist also ziemlich unmöglich.

Das einzige, was Sie tun können, ist verschachtelt die zwei Funktionen, so dass das Kind Funktion Zugriff auf die Eltern Variablen durch Schließung hat:

function obj() { 
    function myfunc() { 
     potato++; 
    } 
    var potato = 12; 
    myfunc(); 
    console.log(potato); // 13 
} 
obj(); 

Wenn Sie nicht möchten, dass die Verschachtelung zu tun, oder wirklich brauchen thisfunc um dynamisch zu sein, alles, was Sie tun können, ist ein Objekt zu bauen und auf seine Eigenschaften statt der lokalen Variablen zugreifen - ein Objekt, das Sie auch weitergeben können.

function thisfunc(x) { 
    x.potato++; 
} 
function obj(myfunc) { 
    var scope = { 
     potato: 12 
    }; 
    myfunc(scope); 
    console.log(scope.potato); // 13 
} 
obj(thisfunc); 
Verwandte Themen