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;
}
Run Code Online (Sandbox Code Playgroud)
现在我想要实现的(或者至少我认为会发生的事情)是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
}
Run Code Online (Sandbox Code Playgroud)
两个错误:匿名函数的语法不包含关键字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;
}
Run Code Online (Sandbox Code Playgroud)
的new关键字创建从该函数的对象.这意味着函数(匿名)立即被调用.这将是相同的
var foo = function() {
alert("1");
alert("2");
alert("3");
}
var func = new foo();
Run Code Online (Sandbox Code Playgroud)
这意味着您创建一个新对象(不是函数!)并在构造函数内部创建警报1,2,3.然后你提醒4.然后你调用LoadHtml什么都不做,然后你警告5.
至于
funcToExecute;
funcToExecute只是一个包含函数的变量.它实际上需要执行.
| 归档时间: |
|
| 查看次数: |
38994 次 |
| 最近记录: |