javascript:将函数作为参数传递给另一个函数,然后按照我期望的顺序调用代码
我想把一个函数作为参数传递给另一个函数 我之所以要这样做,是因为后一个函数调用了一个异步Jquery方法,然后返回一个结果,我希望执行一些javascript代码 因为这个函数是从多个地方调用的,所以我希望要执行的代码(在异步Jquery代码执行之后)被传递到函数中。 有道理吗?我希望:) 现在我们看到的是,代码的执行顺序与我想要的完全不同。 我已将代码简化为以下代码:javascript:将函数作为参数传递给另一个函数,然后按照我期望的顺序调用代码,javascript,jquery,Javascript,Jquery,我想把一个函数作为参数传递给另一个函数 我之所以要这样做,是因为后一个函数调用了一个异步Jquery方法,然后返回一个结果,我希望执行一些javascript代码 因为这个函数是从多个地方调用的,所以我希望要执行的代码(在异步Jquery代码执行之后)被传递到函数中。 有道理吗?我希望:) 现在我们看到的是,代码的执行顺序与我想要的完全不同。 我已将代码简化为以下代码: $('#AddThirdParty').click(function() { var func = new funct
$('#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
但发生的是:警报1、警报2、警报3、警报4、警报5
有人知道我做错了什么,以及为什么这是代码执行的顺序吗
当我定义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')。单击(new function()…)代码>
new
关键字从函数中创建一个对象。这意味着立即调用该函数(匿名)。这将与
var foo = function() {
alert("1");
alert("2");
alert("3");
}
var func = new foo();
这意味着您要创建一个新对象(而不是函数!),并在构造函数中发出警报1、2、3。然后你提醒4。然后调用LoadHtml,它什么也不做,然后向5发出警报
至于
funcToExecute代码>
funcToExecute只是一个包含函数的变量。它实际上需要执行。非常感谢您的回答,99%与Amadan相同,但这一点更容易理解(1%)。希望你不介意。+1是一个简单易懂且写得很好的答案。这很好,但是如果他想在func中包含参数呢?@DrFeelgood:那么他可以用这些参数调用funcToExecute
func
在LoadHtml
中变为funcToExecute
,因此它们接受相同的参数。因此LoadHtml
必须知道通过的参数?为了更好地理解这一点,我尝试编写一个简单的jQuery扩展方法,该方法进行方法切换。我在执行类似于$(“#id”).fnthoggle('click',fnOn($(this)),fnOff($(this)))的操作时遇到问题代码>。我的方法运行一些东西来切换数据切换
元素属性,然后尝试调用fnOn和fnOff,而不需要知道传递给它的参数是什么。@DrFeelgood:由于各种原因,这不起作用;我不太清楚你想做什么。提出一个新问题,并详细说明。
var foo = function() {
alert("1");
alert("2");
alert("3");
}
var func = new foo();