我有一个javascript函数,该函数必须获取一个文件并将其传递给另一个参数:
getJsonFile = function(fileName, callback, error, data) {
var ajaxOptions = {
url: util.pathJoin([Options.server_cache_path, jsonRelativeFileName]),
type: "GET",
dataType: "json",
success: function(album) {
callback(album, data)
},
error: error
};
在整个应用程序中,getJsonFile
函数在for
个周期中被多次调用。
但是,在callback
函数中,有时我发现data
的值已更改...为什么会发生?有什么解决方案?
答案 0 :(得分:0)
如上所述,您正在从循环(用于)中调用 getJsonFile 函数,并且很有可能传递 data 参数作为参考。在这种情况下,您将传递一个指向变量的指针,该变量在每次循环迭代中都会更改,并且在调用成功回调时, data 参数将引用一个与原始呼叫不同的对象。
解决此类问题的一种方法是复制您收到的参数(或至少从数据中获取)的副本。 OR 获取您有兴趣使用的值关闭以捕获当前数据参考值。
getJsonFile = function(fileName, callback, error, data) {
var callbackCall = (function(myData) {
return function(myAlbum) { callback(myAlbum, myData); };
})(data);
var ajaxOptions = {
url: util.pathJoin([Options.server_cache_path, jsonRelativeFileName]),
type: "GET",
dataType: "json",
success: function(album) {
callbackCall(album);
},
error: error
};
避免使用callbackCall变量
getJsonFile = function(fileName, callback, error, data) {
// Code omitted...
success: (function(myData) {
return function(album) { callback(album, myData); };
})(data)
// Code omitted...
}