2012-12-21 21 views
5

Vorrei utilizzare una funzione inline con argomenti per impostare una variabile. Ecco una versione bollito giù (che a quanto pare è solo pseudo codice a questo punto) di quello che sto cercando:Passaggio di argomenti in una funzione in linea

var something = 10; 

var something_else = 15; 

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(); 

In questo caso, "dynamic_value" dovrebbe essere "y". Il problema è che le variabili "qualcosa" e "qualcosa_senza" non sono mai viste all'interno di questa funzione inline.

Come si inviano argomenti a una funzione in linea?

modifica: sto utilizzando jquery, anche se potrebbe non essere applicabile a questa domanda.

risposta

13

inviarle quando si richiama la funzione

var dynamic_value = (function(something, something_else) { 
    ... 
})(value_for_something, value_for_something_else); 
+0

Oooohhh, così quei paren passano negli strumenti della funzione. Che funzioni. Grazie! – Ben

+1

Invocare una funzione del genere è come invocare qualsiasi altra funzione. La sintassi sembra un po 'strana, ma in realtà non è diversa. –

5

Avrete bisogno di chiamare in questo modo.

var dynamic_value = (function(something,something_else){ 
    if(something == something_else){ 
    return "x"; 
    }else{ 
    return "y"; 
    } 
})(something,something_else); 

La ragione di questo è quando si definiscono gli stessi nomi nel parametro funzionale, sono solo i nomi dei parametri, le variabili non vengono inseriti lì. L'ultima riga è chiamata alla funzione in cui vengono passate le variabili effettive.

Inoltre, hai appena creato una chiusura. La chiusura ha accesso a tutte le variabili dichiarate nella funzione che lo contiene. Un altro fatto interessante in questo codice è che le variabili definite a livello di funzione di contenimento vengono oscurate dalle variabili che fanno parte della funzione di chiusura. La ragione è ovvia: i nomi delle variabili alla chiusura sono gli stessi dei nomi delle variabili nella funzione di contenimento.

0

Ho intenzione di indovinare qui che si desidera che dynamic_value si leghi semplicemente a something ma non a something_else.

var base_value = 10; 

var something_else = 15; 

var dynamic_value = (function(base_value){ 
    return function (compare) { 
     if(base_value == compare){ 
      return "x"; 
     } else { 
      return "y"; 
     } 
    }; 
})(base_value); 

alert(dynamic_value(something_else)); // "y" 
alert(dynamic_value(10)); // "x" 
Problemi correlati