2017-02-02 3 views
4

Hier ist das Verhalten Ich suche nach:Javascript - fügen Sie Parameter an eine Funktion als Parameter übergeben

function one(func){ 
    func(5); 
} 

function two(arg1, arg2){ 
    console.log(arg1); 
    console.log(arg2); 
} 

one(two(3)) //prints 3, 5 

kann dieses Verhalten oder etwas ähnliches in Javascript erreicht werden?

+0

Kann den Zweck der Funktionen aus dem Code nicht erhalten. Es wird besser, wenn Sie es in der Sprache erklären können. – jaibatrik

+0

Es gibt keinen Zweck, diese sind dumbed down Beispiele zu illustrieren, was ich ohne unnötige Details – Adam0410

+1

Ich glaube @ MrFarberToYou Antwort fasst meine Gedanken. – jaibatrik

Antwort

4

Einige Abhilfe ist möglich

function one() { 
 

 
    var args = Array.prototype.slice.call(arguments); 
 
    var func = args[0]; 
 
    args.splice(0, 1); 
 
    args.push(5); 
 
    func.apply(this, args); 
 
} 
 

 
function two(arg1, arg2) { 
 
    console.log(arg1); 
 
    console.log(arg2); 
 
} 
 

 
one(two, 3)

+0

@ downvoter - Ich werde es zu schätzen wissen, wenn ein Grund angegeben wird. – nikhil

2

Es gibt ein Problem mit Ihrer Syntax: Funktion one erwartet sein einzelnes Argument, um eine Funktion zu sein. Dann, unten, wenn Sie es aufrufen, übergeben Sie nicht die Funktion two, aber was auch immer two zurückgibt, wenn es ein einzelnes Argument, wahrscheinlich undefined übergeben wird. Ich weiß nicht, was genau Sie erreichen möchten, aber ich würde ein wenig Forschung in closures empfehlen.

+0

Wenn 'two (3)' call eine Funktion zurückgibt, dann erhält 'one' die Funktion als Argument. –

0

sobald one erwartet Funktion als Argument two(3) sollte Funktion zurückgeben.
diese Bedingung erforderlich ist so, um es Ihre two Funktion zu erreichen, sollte es führt
so zu one als Argument übergeben

function two(arg1){ 
    console.log(arg1); 
     return function(arg2) { 
     console.log(arg2); 
    }; 
} 
sein wird

so two(3) Funktionsaufruf vor Wert auf variable Motor zuweisen. Und Ausführung von two(3) Anrufprotokolle 3 zur Konsole und kehrt funktionieren

function(arg2) { 
     console.log(arg2); 
    }; 

und dann ordnet Motor ausgeführt Wert (zurück Funktion) func variabel. so func Parameter von one Funktion sieht nun wie

func = function(arg2) { 
    console.log(arg2); 
}; 

one Anrufe func mit 5 als Argument übergeben. so 5 wird an der Konsole protokolliert.

0
function one(arg){ 
    two(arg, 5); // func here is two so it requires two params... 
} 

function two(arg1, arg2){ 
    console.log(arg1); 
    console.log(arg2); 
} 

one(3)// one expect function so can't execute function here! 
+0

Nicht wirklich, was ich gesucht habe, ist die Idee, die man nicht wissen, was das erste Argument ist, bevor die Funktion aufgerufen wird – Adam0410

+0

Antwort aktualisiert überprüfen Sie es – challenger

+0

aktualisiert wieder .. – challenger

2

Sie immer die bind() Funktion einige Argumente auf Ihre Funktion zu übergeben können. Es wird eine neue Funktion mit dem ersten Argumente erstellen - arg1 - gleich den Wert von in diesem Beispiel:

function one(func){ 
    func(5); 
} 

function two(arg1, arg2){ 
    console.log(arg1); 
    console.log(arg2); 
} 

one(two.bind(null, 3)) 

Sie können mehr über den bind() gelesen Funktion hier: MDN - Bind

0

Grundsätzlich können Sie den Parameter in der Funktion nicht angeben oder er wird ausgeführt. Sie müssen die Funktion aka eins (zwei) angeben, aber das würde natürlich nicht funktionieren.

Allerdings, wenn Sie dynamisch eine Funktion erstellen, sollten Sie in der Lage sein, die Aufgabe zu erfüllen, wie so:

function one(func){ 
    func(5); 
} 

function two(arg1, arg2){ 
    console.log(arg1); 
    console.log(arg2); 
} 

one(function(val) { two(3, val) }) //prints 3, 5 
Verwandte Themen