2009-11-24 4 views
8

Я полагаю, что следующий код:JavaScript: вызов функции себя

jQuery("#mybutton").click(function(){ 

    //do something 

}); 

Как я мог вспомнить, к этой функции «анонимного» ?, я не могу поставить имя этой функции:

var xfun = function(){ 

    //do something 

} 

jQuery("#mybutton").click(xfun); 

я могу сделать что-то вроде этого:

var working = false; 
jQuery("#mybutton").click(function(){ 

    if (working){ 
    var _this = this; 
    _this._eventType = e.type; 
    setTimeout(function() { jQuery(_this).trigger(_this._eventType); }, 200); 
    return false; 
    } 
    //do something 

}); 

, что мне нужно что-то вроде этого:

var working = false; 
jQuery("#mybutton").click(function(){ 

    if (working){ 
    setTimeout(this_function, 200); 
    return false; 
    } 
    //do something 

}); 

спасибо.

EDIT:

Решение:

jQuery("#mybutton").click(function(){ 
    if (working){ 
    var fn = arguments.callee; 
    var _this = this; 
    setTimeout(function(){fn.call(_this);}, 200); 
    return false; 
    } 
    //do something  
}); 
+0

... и вопрос есть? – OscarRyz

+2

@ Оскар: вопрос заключается в том, «как мне повторно запустить анонимную функцию из анонимной функции?» –

ответ

20

Вы можете действительно назвать свою анонимную функцию:

jQuery("#mybutton").click(function doWork(){ 
    if (working){ 
    setTimeout(doWork, 200); 
    return false; 
    } 
    //do something  
}); 

Вы можете также использовать arguments.callee:

jQuery("#mybutton").click(function(){ 
    if (working){ 
    setTimeout(arguments.callee, 200); 
    return false; 
    } 
    //do something  
}); 

Я бы пошел с первым.

+0

+1 У меня была такая же идея. – Gumbo

+0

большое спасибо. –

+3

@andres: np. Это важный вопрос с учетом устаревания 'arguments.callee': https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee –

1

Можете ли вы объяснить, почему вы не можете назвать функцию? Вы можете использовать arguments.callee, чтобы получить ссылку на текущую функцию, но это устарело, и я не уверен, сколько поддержки у него есть среди текущих браузеров.

Смежные вопросы