我对javascript中的函数操作有点困惑。我知道它们都是对象,但是如何改变我将它们用作参数的方式呢?
例如,如果我正在尝试使用回调函数,其中第二个参数在1000ms之后被评估...
$(this).fadeIn(1000,function(){alert('done fading in');});
为什么我不能达到同样的效果:
$(this).fadeIn(1000,alert('done fading in'));
如果我这样做,它会同时评估两者。也就是说,(this)元素淡入并且警报同时弹出。
当我调用alert(arg)时,是不是我创建了一个传递给fadeIn()的新对象?
这究竟是如何运作的?
答案 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函数之前