2012-12-21 22 views
5

Chciałbym użyć funkcji inline z argumentami, aby ustawić zmienną. Oto sprowadzić wersję (która podobno jest tylko pseudo kod w tym momencie), co mam próby:Przekazywanie argumentów do funkcji Inline

var something = 10; 

var something_else = 15; 

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

W tym przypadku „dynamic_value” powinno być „y”. Problem polega na tym, że zmienne "coś" i "coś takiego" nigdy nie są widoczne wewnątrz tej funkcji inline.

W jaki sposób wysyłasz argumenty do funkcji inline?

edit: Używam jquery, chociaż może to nie mieć zastosowania do tego pytania.

Odpowiedz

13

Wyślij je podczas wywoływania funkcja

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

Oooohhh, więc te pareny przechodzą w parens funkcji. To działa. Dziękuję Ci! – Ben

+1

Wywołanie takiej funkcji jest podobne do wywoływania dowolnej innej funkcji. Składnia wygląda trochę dziwnie, ale tak naprawdę nie jest inaczej. –

5

Trzeba nazwać to tak.

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

Powodem tego jest, kiedy definiują te same nazwy w parametrze funkcji, są tylko nazwy parametrów, zmienne nie uzyskać wstawione tam. Ostatnia linia to wywołanie funkcji, w której przekazywane są rzeczywiste zmienne.

Poza tym, właśnie stworzyłeś zamknięcie. Zamknięcie ma dostęp do wszystkich zmiennych zadeklarowanych w funkcji, która go zawiera. Innym interesującym faktem w tym kodzie jest to, że zmienne zdefiniowane na poziomie funkcji zawierającej są zacienione przez zmienne, które są częścią funkcji zamknięcia. Powód jest oczywisty: nazwy zmiennych w zamknięciu są takie same jak nazwy zmiennych w funkcji zawierającej.

0

Zgaduję, że chcesz, aby dynamic_value po prostu wiązał się z something, ale nie 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" 
Powiązane problemy