Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing Arguments into an Inline Function

I'd like to use an inline function with arguments to set a variable. Here is a boiled down version (which apparently is only pseudo code at this point) of what I'm attempting:

var something = 10;

var something_else = 15;

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

In this case, "dynamic_value" should be "y". The problem is that the variables "something" and "something_else" are never seen inside of this inline function.

How do you send arguments to an inline function?

edit: I'm using jquery, although that may not really apply to this question.

like image 663
Flat Cat Avatar asked Dec 21 '12 17:12

Flat Cat


2 Answers

Send them in when invoking the function

var dynamic_value = (function(something, something_else) {
    ...
 })(value_for_something, value_for_something_else);
like image 146
Matt Greer Avatar answered Oct 05 '22 17:10

Matt Greer


You will need to call it like this.

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

The reason for this is when you are defining the same names in the function parameter, they are just the names of the parameters, the variables don't get inserted there. The last line is call to the function where actual variables are passed.

Besides, you have just created a closure. The closure has access to all the variables declared in the function that contains it. Another interesting fact in this code is that variables defined at the containing function level are getting shadowed by the variables that are part of the closure function. The reason is obvious: the variable names at the closure is same as the variable names at the containing function.

like image 35
closure Avatar answered Oct 05 '22 17:10

closure