我有一个像这样的代码
verify_loaded_css.check (function (){
$('#overlay').fadeOut(300, function (){
$(this).remove();
});
});
verify_loaded_css = {
check: function (runCallback){
if (..) {
..
runCallback();
} else {
..
}
}
}
我用随机数放置了console.log以查看哪些函数首先运行(有更好的方法吗?)。我看到检查函数(runCallback)首先运行,我正在尝试理解逻辑。当你有一个匿名函数时,我认为它会自动执行#overlay淡出之后的任何内容。相反,它首先运行runCallback函数,它运行if语句,如果为true则再次调用runCallback()。然后在最后,它将覆盖层淡出。
这是否意味着任何匿名函数都不是自动执行的,如果您声明了其他内容,它会先在其他地方运行任何代码?
谢谢
答案 0 :(得分:1)
在javascript中,每件事都是对象。甚至是“功能”
您可以声明即时功能
提示* 从下往上阅读。
var fadeoutCallback = function (element){
$(element).remove();
}
var checkCallback = function(){
//alert("fadeout the overlay");
$('#overlay').fadeOut(300, fadeoutCallback);
}
//a function that accept another instant of function
var check = function(callback){
if(confirm("checking some condition?") == true){
callback();
}
}
//finally an object act as "class"
myClass = {
myMethod: check
}
//then calling class.method
myClass.myMethod(checkCallback);
答案 1 :(得分:1)
这是否意味着任何匿名函数都不是自动执行的,如果你声明了别的东西,它会先在别处运行任何代码?
正确,匿名函数不自行执行。
函数按它们被调用的顺序运行,就像在其他语言中一样,但是作为ai.farfa提到函数是对象并且可以传递,因此回调的概念。
你说:
我看到check函数(runCallback)首先运行
但更好的写作方式是:
check(function(){/* code in here */})
所以会发生什么事情,你进入check
,runCallback
被绑定到被定义为其参数的function object。
所以这在语义上是相似的(如果js不是weird language,它在语义上是相同的):
function myFadout() {/* code in here */};
check(myFadout);
在这两种情况下,check
的参数代表相同的操作序列,而函数对象只是一种方便的抽象 - 无论是命名的还是无名的。
因此,一旦你到达runCallback()
行,由于runCallback
绑定到myFadout
, 在语义上等同于myFadout()
。