Mic*_*hel 19 javascript jquery
我想将一个函数作为参数传递给另一个函数.
我想这样做,因为后一个函数调用异步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.
有谁知道我做错了什么以及为什么这是执行代码的顺序?
看起来我在定义时会执行alert1..alert3 new function(),但是当我从LoadHtml函数中调用它时,它为什么不执行呢?
Ama*_*dan 34
$('#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只是一个包含函数的变量.它实际上需要执行.
| 归档时间: | 
 | 
| 查看次数: | 38994 次 | 
| 最近记录: |