javascript:将函数作为参数传递给另一个函数,代码以另一个顺序调用然后我期望

我想将一个函数作为参数传递给另一个函数。

我想这样做,因为后一个函数调用异步Jquery方法和AFTER,它返回结果,我想要执行一些javascript代码。

并且因为从多个地方调用此函数,我希望代码在函数中传递(在执行异步Jquery代码之后)。 说得通? 我希望 :)

现在看到的是代码执行的顺序不是我想要的。 我已将代码简化为此代码:

$('#AddThirdParty').click(function() { var func = new function() { alert('1'); alert('2'); alert('3'); } alert('4'); LoadHtml(func); alert('5'); }); function LoadHtml(funcToExecute) { //load some async content funcToExecute; } 

现在我想要实现的(或者至少我认为会发生的事情)是alert4会触发,然后loadhtml将触发alert1,alert2和alert3,然后代码将返回alert5。

但是会发生什么:alert1,alert2,alert3,alert4,alert5。

有谁知道我做错了什么以及为什么这是执行代码的顺序?

看起来我在定义new function()时会执行alert1..alert3,但是当我从LoadHtml函数调用它时,它为什么不执行?

 $('#AddThirdParty').click(function() { var func = function() { // NOTE: no "new" alert('1'); alert('2'); alert('3'); } alert('4'); LoadHtml(func); alert('5'); }); function LoadHtml(funcToExecute) { //load some async content funcToExecute(); // NOTE: parentheses } 

两个错误:匿名函数的语法不包含关键字new ; 并且JavaScript需要括号来进行函数调用,即使函数不接受任何参数也是如此。 当你只说funcToExecute ,这只是一个变量,它在没有使用该值的上下文中给出它的值(有点像写3;作为语句)。

你可能会注意到你已经知道如何使用匿名函数:你没有写$('#AddThirdParty').click(new function() ...);

 $('#AddThirdParty').click(function() { var func = new function() { alert('1'); alert('2'); alert('3'); } alert('4'); LoadHtml(func); alert('5'); }); function LoadHtml(funcToExecute) { //load some async content funcToExecute; } 

new关键字从函数创建一个对象。 这意味着函数(匿名)立即被调用。 这将是相同的

 var foo = function() { alert("1"); alert("2"); alert("3"); } var func = new foo(); 

这意味着您创建一个新对象(不是函数!)并在构造函数内部创建警报1,2,3。 然后你提醒4.然后你调用LoadHtml什么都不做,然后你提醒5。

至于

funcToExecute;

funcToExecute只是一个包含函数的变量。 它实际上需要执行。