不通过内部函数访问外部函数参数
我有一个函数,它可以在成功时调用一个匿名函数&。匿名函数参数用于收集来自服务器的响应,但它在内部不可用内部函数除非作为参数传递。不通过内部函数访问外部函数参数
callService('POST', getDataInfo, detailData, function (data) { formDisplayGrid('.accruedGrid', '.accruedTable', 'Total Accrued');//doesn't work.
formDisplayGrid(data,'.accruedGrid', '.accruedTable', 'Total Accrued'); //works
});
callService
只是它使用jQuery的AJAX发出呼叫的功能。
function callService(method, url, data, success) { var ajaxObject = {
url: url,
method: method,
dataType: 'json',
success: success
}
if (method == 'POST') {
ajaxObject['data'] = data;
}
jQuery.ajax(ajaxObject);
}
formDisplayGrid
函数只是迭代数据集以形成HTML表。
function formDisplayGrid(data, modalSelector, mainGridSelector, totalLabel) { jQuery(modalSelector).modal();
if (typeof data != 'undefined' && data.Code === 200) {
var mainGrid = jQuery(mainGridSelector);
var tbody = '';
jQuery.each(data['Data']['category'], function (k, v) {
//some code here.
jQuery.each(v['subcat'], function (k, v) {
//some code here.
});
});
//some code here.
mainGrid.find('tbody').html(tbody).fadeIn(1200);
}
}
是,因为匿名函数在 正在执行jQuery.ajax
功能,它应该是可用的,如果匿名函数直接的callService
函数中执行,这是怎么回事?
回答:
的概念基本上是简单的,你formDisplayGrid()函数是外部函数回调函数,以便它不应该有访问私有变量在那个回调函数中。但是如果你想要第一种方法工作,你将不得不在回调函数中定义函数。
回答:
您的formDisplayGrid
函数将无法访问调用它的任何变量,除非这些变量是全局变量或它们处于闭包中。
编辑:你的函数必须从某个地方得到它的data
参数 - 否则怎么知道什么数据是?有一个很好的理由,只有第二个工作。
EDIT2:这里是一个封闭的解决方案:
callService('POST', getDataInfo, detailData, function (data) { function formDisplayGrid(modalSelector, mainGridSelector, totalLabel) {
// you no longer need the data variable
jQuery(modalSelector).modal();
if (typeof data != 'undefined' && data.Code === 200) {
var mainGrid = jQuery(mainGridSelector);
var tbody = '';
jQuery.each(data['Data']['category'], function (k, v) {
//some code here.
jQuery.each(v['subcat'], function (k, v) {
//some code here.
});
});
//some code here.
mainGrid.find('tbody').html(tbody).fadeIn(1200);
}
}
formDisplayGrid('.accruedGrid', '.accruedTable', 'Total Accrued');//should work.
});
以上是 不通过内部函数访问外部函数参数 的全部内容, 来源链接: utcz.com/qa/264430.html