Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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,我对javascript中函数的操作方式有点困惑。我知道它们都是对象,但这会如何改变我将它们用作参数的方式 例如,如果我试图使用一个回调函数,其中第二个参数在1000毫秒后求值 $(this).fadeIn(1000,function(){alert('done fading in');}); 为什么我不能用以下方法达到同样的效果: $(this).fadeIn(1000,alert('done fading in')); 如果我这样做,它会同时计算这两个参数。也就是说,(此)元素淡入,同时

我对javascript中函数的操作方式有点困惑。我知道它们都是对象,但这会如何改变我将它们用作参数的方式

例如,如果我试图使用一个回调函数,其中第二个参数在1000毫秒后求值

$(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(窗口,“淡入淡出完成”))