2

Stellen Sie sich den folgenden Code ein:Javascript Zugangsparameter außerhalb einer gegebenen Funktion

fruitMixer = function(fruitHandler, action){ 
    // get the given arguments in fruitHandler 
    var args = fruitHandler.arguments; 

    // retrieve these arguments outside the fruitHandler function 
    if(args[0] == undefined) return; 
    var action = args[0]['action']; 

    // do something if it wants to mix 
    if(action == 'mix'){ 
     fruitHandler(args); 
    }else{ 
     // do other stuff 
    } 
} 
fruitMixer(function({ 
    'action': 'mix', 
    'apples': 3, 
    'peaches': 5} 
    ){ 
     // mix the fruits 
    }); 

, was ich zu tun bin versucht, die Parameter außerhalb der angegebenen anonymen Funktion zu erhalten. Mit diesen Parametern können Sie dann Dinge wie oben tun.

Ich weiß, dass dieser Code nicht funktioniert, weil die Argumente außerhalb der Funktion nicht zugänglich sind. Aber ich habe mich gefragt, ob es einen anderen Weg oder Workaround dafür gibt?

+0

scheint eine gültige Frage Muster zu mir. –

+0

Aber ... wenn Sie die anonymen Funktionsparameter angeben, dann rufen Sie sie an. Es hätte laufen und zurückkehren sollen ... was auch immer ... zu der Zeit, die 'fruitMixer' heißt. Ihr Beispiel ist eine unzulässige Syntax. – Zecc

+0

Ich weiß, die Syntax ist illigal, ich habe mich nur gefragt, ob der Zugriff auf diese Parameter möglich ist (was ich denke, es wird nicht), aber ich mag einige kreative Lösungen zu versuchen, das gleiche zu tun – sebas2day

Antwort

2

Die offensichtliche Sache zu tun wäre, Handler von Handlerargumente zu trennen.

fruitMixer = function(fruitHandler, fruitHandlerArgs) { 
    //do stuff here 

    //call the handler, passing it its args 
    fruitHandler(fruitHandlerArgs); 
} 

fruitMixer(function() { 
    //mix the fruits 
}, { 
    arg1: 'some val', 
    arg2: 'some other val' 
}); 
0

Example of function scope

Ich verstehe Ihre Frage nicht in vollem Umfang kann. Doch in JavaScript können Sie ein paar coole Sachen in Bezug auf Funktionsumfang tun:

var fruitMixer = function() { 
    var arg1 = this.arg1, 
     arg2 = this.agr2; 
    if (arg1 is something) { 

    } else { 
     arg2('something else'); 
    } 
} 

fruitMixer.call({arg1: 'some val', arg2: function (value) { 
     // handle value 
    } 
}) 

So können Sie den Kontext this in eine Funktion mit Aufruf übergeben.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

Verwandte Themen