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只是一个包含函数的变量。 它实际上需要执行。