Javascript jQuery:将匿名回调重写为命名函数
如果我这样做:Javascript jQuery:将匿名回调重写为命名函数,javascript,jquery,callback,anonymous-function,Javascript,Jquery,Callback,Anonymous Function,如果我这样做: $('h1').slideUp('slow', function() { $('div:first').fadeOut(); }); function last() { $('div:first').fadeOut(); } $('h1').slideUp('slow', last()); h1将向上滑动,然后第一个div将淡出 但是,如果我这样做: $('h1').slideUp('slow', function() { $('div:first').fadeOut();
$('h1').slideUp('slow', function() { $('div:first').fadeOut(); });
function last() { $('div:first').fadeOut(); }
$('h1').slideUp('slow', last());
h1将向上滑动,然后第一个div将淡出
但是,如果我这样做:
$('h1').slideUp('slow', function() { $('div:first').fadeOut(); });
function last() { $('div:first').fadeOut(); }
$('h1').slideUp('slow', last());
h1将向上滑动,同时div将淡出
如何使我的第二个示例与第一个示例相同,其中在slideUp()之后调用fadeOut()?您不需要使用函数返回值(通过调用函数获得),但函数体:
$('h1').slideUp('slow', last);
您所做的与此相同:
var returned = last(); // call to last returns undefined
// so returned has the value undefined
$('h1').slideUp('slow', returned); // simply sending undefined as a callback
因此,您只是内联执行last
函数,然后将返回值(因为它不返回任何内容,所以返回值未定义)作为参数传递给slideUp
的回调函数
希望此示例有助于您理解:
函数外部(){
函数内部(){};
返回内部;
}
警报(外部);//返回外部函数体
警报(外部());//返回外部函数的返回值,即内部函数上次的返回值last()
,函数vs调用函数。请解释一下?我不明白有什么区别。slideUp
需要一个函数last
是一个函数last()
调用函数last
。不一样。你需要引用包含函数的变量,你不想调用函数并返回它返回的任何内容。在第二个示例中添加括号类似于编写$('h1').slideUp(function(){$('div:first').fadeOut();}())代码>,注意额外的括号,JavaScript的工作方式与PHP不同?因为在PHP中,每当我需要调用一个函数时,我都必须使用括号。不,这与此无关-你不需要调用函数,slideUp
会在需要时调用它。看看您的原始代码:function(){$('div:first').fadeOut();}
您没有调用这个函数,对吗?PHP也是如此。我添加了一个示例来帮助您更好地理解。感谢您提供示例代码片段Shomz。它帮助我理解JavaScript是如何工作的。