如何从函数内部调用函数,使其变为递归?这是我的代码,我添加了一个注释,我想开始递归:
$('a.previous-photos, a.next-photos').click(function() {
var id = $('#media-photo img').attr('id');
var href = $(this).attr('href');
href = href.split('/');
var p = href[href.length - 1];
var url = '/view/album-photos/id/' + id + '/p/' + p;
$.get(url, function(data) {
$('.box-content2').replaceWith('<div class="box-content2"' + data + '</div>');
});
// here I want to call the function again
return false;
});
Run Code Online (Sandbox Code Playgroud)
最佳答案已过时。目前(2012 年 8 月)至少在 Firefox 中不推荐使用 callee。使用 callee 已过时。目前(2012 年 8 月)被调用者是“...... ECMA-262 不推荐使用。”(见讨论)
这是两者中更容易的。通常使用匿名函数的原因是为了保持命名空间干净。括号定义了一个本地命名空间,因此在为函数命名后,括号外将无法访问它。以下内容对您有用:
$('.someclass').onClick( function dosomething(){
... your code ...
dosomething() //again
});
dosomething() // will cause scope error, function not defined
Run Code Online (Sandbox Code Playgroud)
这有点困难。由于传递给函数的唯一内容是事件对象,因此您需要扩展它以传递值。幸运的是,事实证明 jQuery 有一个专门用于此的系统!
$('.someclass').on( 'click', {myvar: 0}, function dosomething(event){
... your code ...
event.data.myvar = event.data.myvar + 1;
dosomething(event) //again
});
Run Code Online (Sandbox Code Playgroud)
注意:这对于必须附加和分离处理程序以防止无限循环(如 DOMSubtreeModified)时特别有用。
$('.someclass').on( 'DOMSubtreeModified.mynamespace', {myvar: 0}, function myfunc( event ){
$(this).off( 'DOMSubtreeModified.mynamespace' );
... Some Code that changes .someclass subtree ...
event.data.myvar = event.data.myvar + 1;
$(this).on( 'DOMSubtreeModified.mynamespace', {myvar: event.data.myvar}, myfunc );
});
Run Code Online (Sandbox Code Playgroud)