如果我有一个函数,像这样:
function f(x,y){
return x + y;
}
如果我有要传递给 f 的参数变量:
var parameter1;
var parameter2;
如果我将此函数调用分配给一个变量:
var functionCallValue = f(parameter1,parameter2);
如何确保 functionCallValue 根据分配给变量 parameter1 和 parameter2 的不同值而变化?
如果我有一个函数,像这样:
function f(x,y){
return x + y;
}
如果我有要传递给 f 的参数变量:
var parameter1;
var parameter2;
如果我将此函数调用分配给一个变量:
var functionCallValue = f(parameter1,parameter2);
如何确保 functionCallValue 根据分配给变量 parameter1 和 parameter2 的不同值而变化?
functionCallValue
被分配了函数的结果(返回值)f
。(调用该函数,计算值并将结果传递给您的变量。)因此functionCallValue
不会自动更新,如果您更改参数(这根本没有意义),您需要再次调用该函数并更改参数。
对于自动更新之类的东西,您需要这样的闭包:
var asdf = (function(){
var param1 = 1;
var param2 = 2;
var result = param1+param2;
function compute(){
result = param1 + param2;
}
return{
param1:function(x){
param1 = x;
compute();
},
param2:function(x){
param2 = x;
compute();
},
result:function(){
return result;
}
}
})();
console.log(asdf.result()); // logs 3
asdf.param1(3);
console.log(asdf.result()); // logs 5
我想你需要的是一个闭包。
var servant = function(x, y) { return x + y; };
var param1 = 40;
var param2 = 2;
var master = function() { return servant(param1, param2) };
var result = master(); // 42.
param1 = 2;
param2 = 40;
var anotherResult = master(); // still 42, because that's really the answer!