在JavaScript中遇到匿名函数问题

时间:2009-09-09 05:19:05

标签: javascript parameters anonymous-function

jQuery.fn.testeee = function(_msg)
{
    alert(_msg);
    $(this[0]).overlay({ 
        onBeforeLoad: function() 
        {
            alert(_msg);
        }
    }).load();
};
$("#popup").testeee ('test');
$("#popup").testeee ('another_test');

显示:

  • 测试
  • 测试
  • another_test
  • 测试

指定给onBeforeLoad的de匿名函数内的alert()会一直显示“test”。我试试这个:

jQuery.fn.testeee = function(_msg)
{
    alert(_msg);
    $(this[0]).overlay({ 
        onBeforeLoad: static_func(_msg)
    }).load();
};
function static_func(_msg) 
{
    alert(_msg);
}
$("#popup").testeee ('test');
$("#popup").testeee ('another_test');

它运作得很好。它显示:

  • 测试
  • 测试
  • 测试
  • 测试

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

如果您创建这样的对象:

{
   onBeforeLoad: static_func(_msg)
}

它没有指定要调用的函数,而是立即调用函数并将返回值存储在对象中。

要指定要呼叫的功能,请仅使用功能名称:

{
   onBeforeLoad: static_func
}

如果要使用自己指定的参数调用函数,则必须通过将其包装在匿名函数中来创建包含变量的闭包:

{
   onBeforeLoad: function() { static_func(_msg) }
}