何时在javascript中声明一个新的(匿名)函数?

时间:2012-01-03 08:08:54

标签: javascript jquery

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

例如,如果我正在尝试使用回调函数,其中第二个参数在1000ms之后被评估...

$(this).fadeIn(1000,function(){alert('done fading in');});

为什么我不能达到同样的效果:

$(this).fadeIn(1000,alert('done fading in'));

如果我这样做,它会同时评估两者。也就是说,(this)元素淡入并且警报同时弹出。

当我调用alert(arg)时,是不是我创建了一个传递给fadeIn()的新对象?

这究竟是如何运作的?

3 个答案:

答案 0 :(得分:19)

在此

 $(this).fadeIn(1000,alert('done fading in'));

fadeIn()看到的第二个参数是什么?这是调用

的结果
 alert('done fading in')

我们正在调用alert()之前调用fadeIn()。

在这种情况下

$(this).fadeIn(1000,function(){alert('done fading in');});

我们有一个对象

 function(){alert('done fading in');}

fadeIn()在正确的时间调用。

答案 1 :(得分:5)

当你写:

$(this).fadeIn(1000,alert('done fading in'));

通过在此名称后面添加函数名称和括号,可以通过immadiately调用名为alert的函数。并且fadeIn传递此调用的结果 - 这是未定义的,因为警报返回始终未定义。

写作时

$(this).fadeIn(1000,function(){alert('done fading in');});

创建一个函数对象,并将此函数对象传递给fadeIn。所以在fadeIn完成后它可以调用这个函数。

与以下内容相同:

// create function
var callback = function () { alert('done fading in'); };
// and pass this function to fadeIn
$(this).fadeIn(1000, callback);

但是当你写:

var callback = alert('done fading in');
$(this).fadeIn(1000, callback);

然后你将immadiately调用alert并传递给fadeIn值,警报返回 - undefined。

答案 2 :(得分:2)

在第一行中,第二个参数是方法。在第二行中是一个方法调用。

您也可以像这样写

function fadeInCallback() {
    alert('done fading in');
}

$(this).fadeIn(1000, fadeInCallback);

所以我们做的是传入对fadeInCallback的引用,这样jQuery fadeIn函数可以在淡入淡出后调用fadeInCallback。

第二行将执行

alert('done fading in');

在执行jQuery fadeIn函数之前