Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript:将函数作为参数传递给另一个函数,然后按照我期望的顺序调用代码_Javascript_Jquery - Fatal编程技术网

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

javascript:将函数作为参数传递给另一个函数,然后按照我期望的顺序调用代码,javascript,jquery,Javascript,Jquery,我想把一个函数作为参数传递给另一个函数 我之所以要这样做,是因为后一个函数调用了一个异步Jquery方法,然后返回一个结果,我希望执行一些javascript代码 因为这个函数是从多个地方调用的,所以我希望要执行的代码(在异步Jquery代码执行之后)被传递到函数中。 有道理吗?我希望:) 现在我们看到的是,代码的执行顺序与我想要的完全不同。 我已将代码简化为以下代码: $('#AddThirdParty').click(function() { var func = new funct

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

我之所以要这样做,是因为后一个函数调用了一个异步Jquery方法,然后返回一个结果,我希望执行一些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

但发生的是:警报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();