Всегда следуйте концепции предоставления наименьших привилегий всему вашему коду. Если никакой другой код не должен ссылаться на эти функции, нет необходимости определять их снаружи, и изменение этих функций проще, поскольку вам гарантировано, что они не используются нигде, кроме как внутри цикла.
Если бы f1, f2, f3 требовался доступ к переменным замыкания в циклической функции, они должны были бы быть определены в функции независимо от того, что.
Однако есть одна оговорка. Для их определения внутри функции требуется создавать новое замыкание при каждом запуске функции цикла. В зависимости от того, насколько плотный цикл, это может повлиять на производительность. Моя точка зрения такова: преждевременная оптимизация - это плохо, но имейте это в виду.
К вашему сведению: вот еще один способ сделать это (если вам не нужны переменные замыкания), который позволяет избежать создания замыканий для каждой итерации цикла. Это выглядит немного сложным, так что это не для слабонервных
(function( $ ){
var defaults = {};
$.fn.cmFlex = function(opts) {
this.each((function() {
function f1(){}
function f3(){}
function f2(){}
// This is the method that will be called for each iteration of the loop. It now
// has access to f1,f2,f3 but doesn't need to create a closure for each iteration.
return function() {
var $this = $(this);
//Element specific options
var o = $.extend({}, defaults, opts);
f1();
f2();
f3();
};
})());
};
})( jQuery );