2015-02-26 2 views
2

Я слышал из некоторых уроков, что определение функций внутри функции - это плохая практика.Код повторного использования внутри оператора if. (Является ли функция внутри функции плохой практикой?)

В моем случае мне нужно повторно использовать код внутри двух вложенных обратных вызовов. Например:

router.get('...', function(req, res) { 
    db.on('load', function(){ 
    function doRequest() { 
     // Valid token required to do the request. 
    } 

    if (!validToken) { 
     getValidToken().then(... doRequest() ...) 
    } 
    else { 
     doRequest() 
    } 
    }); 
}); 

Вы видите функцию doRequest() определяются внутри других функций (обратных вызовов). Когда-нибудь в будущем мне, возможно, понадобится сделать что-то подобное, но внутри defined от меня function. Это неправильно?

Я использую неверную практику в этом «коде»? Могу ли я сделать это лучше?

+1

Это мое мнение, но я думаю, что функция, определенная в функции, - это совершенно нормально. Если этот код не используется повторно и предназначен только для этой ситуации, тогда я думаю, что лучше написать его внутри функции, чем разоблачить его ... плюс написать его где-то еще, просто отделяет его от того, где происходит действие, из-за чего трудно сказать в глаза, что делает этот код. –

ответ

1

Если в пределах области обратного вызова определено doRequest(), оно будет существовать только в этой области. Это называется закрытием, и это полезно во многих ситуациях. Поэтому, если вы используете эту функцию только в этой области, это не проблема, так как вы не будете дублировать контент.

С другой стороны, если doRequest() выполняет общие функции и не получает доступа к данным из обратного вызова (без отправки в качестве параметра), он должен быть определен снаружи, чтобы впоследствии его можно было повторно использовать.

В конце концов, это действительно вопрос балансировки кода, производительности и доступа к данным. Вот учебник по scopes and closures.

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