在某些情况下,我需要将值类型作为引用传递而不更改处理函数。
示例数字类型(var limit)
var limit = 0; // Need to be the reference type
var multiCallback = new MultiCallback(limit, function(){});
for (element in myObject)
{
limit++;
element.DoSomething(multiCallback.callback);
}
function MultiCallback(limit, func)
{
var calls = 0;
function callback()
{
if (++calls == limit)
{
func();
}
}
return {
callback : callback
}
}
可检查的函数类型
var resizeCallback = function(){};
$(window).resize(resizeCallback);
function showPage()
{
resizeCallback = resizePage();
}
function showLoader()
{
resizeCallback = resizeLoader();
}
是否有解决方案
答案 0 :(得分:1)
更改变量的值永远不会更新变量的先前值。
对于函数,您可以执行以下操作:
var current = function() { ... };
function resizeCallback() {
return current.apply(this, arguments);
}
// Updating current will work:
current = function() { ... something ... };
对于其他值(基元和对象),最接近的是传递对象:
var limit = {value: 0};
function MultiCallback(limit, func) {
....
if (limit.value == ++calls) ...
}
// Changing limit:
limit.value = 1;
答案 1 :(得分:1)
javascript中没有通过引用传递(调用者看不到赋值参数)。您在函数示例中所做的是修改全局变量。
您可以使用对象包装它,并且调用者可以看到该对象的突变:
var limit = {
value: 0
};