javascript - 在 JavaScript 中使用匿名函数有问题

标签 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');

这显示:

  • 测试
  • 测试
  • 另一个测试
  • 测试

分配给 onBeforeLoad 的匿名函数中的 alert() 一直显示“测试”。我试试这个:

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');

而且效果很好。它显示:

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

有人知道为什么会发生这种情况吗?

最佳答案

如果你像这样创建一个对象:

{
   onBeforeLoad: static_func(_msg)
}

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

要指定要调用的函数,您只需使用函数名称:

{
   onBeforeLoad: static_func
}

如果你想用你自己指定的参数调用函数,你必须创建一个包含变量的闭包,方法是将它包装在一个匿名函数中:

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

关于javascript - 在 JavaScript 中使用匿名函数有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1397672/

相关文章:

javascript - 通过 jQuery .each 在嵌入式数组上使用 find()

javascript - Jest 预期模拟函数已被调用,但未被调用

javascript - 声明一个 Ajax 函数并用不同的变量填充它

javascript - 将工具提示的值发送到 javascript 函数

c - 在函数内部修改参数 'passed by value' 并将它们用作局部变量

c++ - 用多态成员函数替换 lambda 函数

swift - 如何创建一个内联匿名函数,以便在函数调用中立即使用?

javascript - 您对具有代码完成功能的简单 JavaScript 编辑器有何建议?

java - 碧 Jade 报告 : Store in variable value of parameter bean property

javascript - 匿名函数导致在 AJAX 成功后不设置 id