6

我想使用带参数的内联函数来设置变量。这是我正在尝试的简化版本(此时显然只是伪代码):

var something = 10;

var something_else = 15;

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

在这种情况下,“dynamic_value”应该是“y”。问题是变量“something”和“something_else”在这个内联函数中从未出现过。

如何将参数发送到内联函数?

编辑:我正在使用 jquery,尽管这可能并不真正适用于这个问题。

4

3 回答 3

18

调用函数时发送它们

var dynamic_value = (function(something, something_else) {
    ...
 })(value_for_something, value_for_something_else);
于 2012-12-21T17:45:09.627 回答
5

你需要这样称呼它。

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

原因是当您在函数参数中定义相同的名称时,它们只是参数的名称,变量不会插入那里。最后一行是调用传递实际变量的函数。

此外,您刚刚创建了一个闭包。闭包可以访问包含它的函数中声明的所有变量。这段代码中另一个有趣的事实是,在包含函数级别定义的变量被作为闭包函数一部分的变量所掩盖。原因很明显:闭包处的变量名与包含函数处的变量名相同。

于 2012-12-21T17:45:20.857 回答
0

我会在这里猜测您dynamic_value只想绑定到something而不是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"
于 2012-12-21T17:49:28.593 回答