何时在javascript中声明新的(匿名)函数?
我对javascript中函数的操作方式有点困惑。我知道它们都是对象,但这会如何改变我将它们用作参数的方式 例如,如果我试图使用一个回调函数,其中第二个参数在1000毫秒后求值何时在javascript中声明新的(匿名)函数?,javascript,jquery,Javascript,Jquery,我对javascript中函数的操作方式有点困惑。我知道它们都是对象,但这会如何改变我将它们用作参数的方式 例如,如果我试图使用一个回调函数,其中第二个参数在1000毫秒后求值 $(this).fadeIn(1000,function(){alert('done fading in');}); 为什么我不能用以下方法达到同样的效果: $(this).fadeIn(1000,alert('done fading in')); 如果我这样做,它会同时计算这两个参数。也就是说,(此)元素淡入,同时
$(this).fadeIn(1000,function(){alert('done fading in');});
为什么我不能用以下方法达到同样的效果:
$(this).fadeIn(1000,alert('done fading in'));
如果我这样做,它会同时计算这两个参数。也就是说,(此)元素淡入,同时弹出警报
当我调用alert(arg)时,我不是在创建一个新对象,并将其传递到fadeIn()中吗
这到底是如何工作的?在第一行中,第二个参数是一个方法。第二行是方法调用 你也可以这样写
function fadeInCallback() {
alert('done fading in');
}
$(this).fadeIn(1000, fadeInCallback);
因此,我们要做的是传入一个对fadeInCallback的引用,这样jQuery fadeIn函数就可以在完成淡入后调用fadeInCallback
第二行将执行
alert('done fading in');
在本例中执行jQuery fadeIn函数之前
$(this).fadeIn(1000,alert('done fading in'));
fadeIn()的第二个参数是什么?这是打电话的结果
alert('done fading in')
在调用fadeIn()之前,我们正在调用alert()
在这种情况下
$(this).fadeIn(1000,function(){alert('done fading in');});
我们有一个目标
function(){alert('done fading in');}
哪个fadeIn()在正确的时间调用。写入时:
$(this).fadeIn(1000,警报('done disking');
通过将函数名和括号放在函数名之后,可以无条件地调用函数alert。并将此调用的结果传递给fadeIn-这是未定义的,因为alert返回的总是未定义的
当你写作时
$(this.fadeIn(1000,function(){alert('done淡入');});
创建一个函数对象,并将该函数对象传递给fadeIn。所以在fadeIn完成后,它可以调用这个函数
这与:
//创建函数
var callback=function(){alert('done falling in');};
//并将此函数传递给fadeIn
$(this).fadeIn(1000,回调);
但当你写作时:
var callback=alert('done disking in');
$(this).fadeIn(1000,回调);
然后,您将立即调用alert并传递给fadeIn值,alert返回-未定义。好问题。我将继续为语言迷们介绍这一点:您需要的技术称为[partial function application][1],通常也称为Currying。实际上,您需要一个新函数,其中一些参数是固定的,而另一些参数不是固定的。[1] :@nd:不,不是这样的。在这个例子中,没有进行currying或部分求值。如果你正在寻找一个术语,匿名函数就是它。对于以函数为参数的函数,也可以使用高阶函数。@KaptajnKold您是对的-但我读到的问题是randomafk假设警报('done Fashing in')将返回一个curried函数(它没有)。我希望我没有增加OP.@nd:Currying的一般混乱,它确实存在于EcmaScript 5中。您可以这样做:
$(this.fadeIn(1000,alert.bind(窗口,“淡入淡出完成”))
。