我想使用带参数的内联函数来设置变量。这是我正在尝试的一个简化版本(在这一点上显然只是伪代码):
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,虽然这可能不适用于这个问题。
答案 0 :(得分:15)
在调用函数
时发送它们var dynamic_value = (function(something, something_else) {
...
})(value_for_something, value_for_something_else);
答案 1 :(得分:5)
你需要这样打电话。
var dynamic_value = (function(something,something_else){
if(something == something_else){
return "x";
}else{
return "y";
}
})(something,something_else);
原因是当你在函数参数中定义相同的名称时,它们只是参数的名称,变量不会插入那里。最后一行是调用实际变量传递的函数。
此外,您刚刚创建了一个闭包。闭包可以访问包含它的函数中声明的所有变量。此代码中另一个有趣的事实是,在包含函数级别定义的变量会被作为闭包函数一部分的变量所遮蔽。原因很明显:闭包处的变量名与包含函数的变量名相同。
答案 2 :(得分: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"