2014-10-28 4 views
-1

У меня есть функция JavaScript, которая называется «updateData», которую я передаю как параметр в другую функцию «process» внутри самой функции «updateData».javascript - передача функции внутри себя

var updateData = function(){ 
    var bean= { 
    "name" : $("#name").val(), 
    "sort" : $('#sort').val(), 
    "reference" : "sample" 
    }; 
    var param = { 
    'bean' : bean, 
    'reference' : "sample" , 
    'ajaxtype' : 'POST', 
    'url' : 'samp.json', 
    'valFn' : validateData, 
    'updateFn' : updateData, 
    'populateFn' : populateData 
    }; 
    process(param); 
}; 

Я делаю это потому, что мне нужно, чтобы связать функцию «UpdateData» на кнопку, которая создается в процессе().

В этом случае возникнут проблемы? Правильно ли это?

(Я до сих пор не сталкивался с какими-либо проблемами. Но я новичок в функциональном программировании, и я хотел быть уверенным, что это не вызовет никаких проблем).

ответ

2

Это будет работать. Причина этого заключается в том, что функция определена и не оценивается во время написания этой функции. Таким образом, к моменту вызова этой функции переменная updateData уже имеет ссылку на объект функции, и эта ссылка будет передана объекту, который вы определили внутри.

0

Это сработает.

var upDateData = function() { 
    var params = { data : upDateData }; 
    alert(params.data); 
} 

upDateData(); 

Но тогда вы можете использовать делегирование, чтобы обработать это, если кнопка отображается на той же странице.

1

Да, вы можете. Функция может ссылаться на себя внутри своего определения. Потому что без этого вы не сможете делать рекурсивные звонки.

Поскольку ниже код может работать:

var updateData= function() { 
    if(someCondition){ 
     updateData(); 
    } else { 
     return; 
    } 
} 

Следующий код будет работать:

var updateData= function() { 
    process(updateData); 
} 

ИЛИ

var updateData= function() { 
    var param = {'updateFn' : updateData}; 
    process(param); 
} 

Ваш код будет работать абсолютно нормально. Просто убедитесь, что он не входит в бесконечный цикл.

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