Javascript 匿名函数的访问函数参数
如何从下面的FetchData方法中访问版本参数 注意-Fetch data是一个异步Rest调用,它将数据传递给回调函数Javascript 匿名函数的访问函数参数,javascript,jquery,closures,Javascript,Jquery,Closures,如何从下面的FetchData方法中访问版本参数 注意-Fetch data是一个异步Rest调用,它将数据传递给回调函数 function TestData(guid, version) { var data = ''; data = FetchData(guid, function (guid, msg) { alert(version);
function TestData(guid, version) {
var data = '';
data = FetchData(guid, function (guid, msg) {
alert(version);
return getData(guid, msg);
}));
}
尝试将
version
param添加到FetchData
函数中。
这是最简单的方法
function TestData(guid, version) {
var data = '';
data = FetchData(guid, version, function (guid, msg) {
alert(version);
return getData(guid, msg);
}));
}
如果您在回调中需要它-这段代码就可以了 例如,此代码的结果将是警报(“hello”)
你们不能把version作为参数传递给FetchData吗?你们所拥有的应该可以正常工作。JavaScript具有词法范围,
version
显然位于回调的词法范围内。有什么问题?(我的意思是,有一个语法错误,可能就是这样吧?)?是什么让您认为FetchData
甚至接受了第三个参数?如果您在FetchData函数中运行callback,那么您就可以访问version
变量。我不知道你们的代码,同样的想法是把这个变量传递给回调函数。“若你们在FetchData函数中运行回调,那个么你们就可以访问版本变量。”不是全部!反例:函数FetchData(foo,cb){cb();};FetchData(42,函数(){alert(foo);})代码>。根据您的说法,回调应该可以访问foo
。但它没有,它抛出了一个错误。JavaScript有词法范围,而不是动态范围。我不明白你的问题是什么。您想从第一个触发函数发送version
变量,但不想将其设置为参数?我没有问题。我只是说你提出的解决方案并不能解决眼前的问题。OP希望访问回调中的版本
。仅仅将version
传递给执行回调的函数并不能解决这个问题。坦白地说,OP的代码没有明显的错误,它应该按原样工作。所以你是说OP的代码没有问题,问题应该解决?是的,除非我不理解这个问题。
function TestData(guid, version) {
var data = '';
data = FetchData(guid, function (guid, msg) {
alert(version);
return getData(guid, msg);
});
}
function FetchData(guid, callback) {
$.get('http://www.example.com/', callback);
}
TestData('abc', 'hello');