我是JS的新手。我尝试了函数闭包,就像在文档示例中一样,我得到了一个未被捕获的引用。为什么呢?
function fetchData(filter) {
return $.ajax({
type: "GET",
contentType : "application/json; charset=utf-8",
dataType: "json",
url: "my_url"+route,
data: filter
});
};
function fetchDataSource(filter) {
var route = "data_source";
return fetchData(filter);
};
现在,当我调用该函数时:
var filter;
fetchData(filter);
我有以下错误:
未捕获的ReferenceError:未定义路由 at fetchData(:6:49) at fetchDataSource(:3:10) at:1:1
为什么路线在我的功能中不可见?
由于
答案 0 :(得分:1)
fetchData函数在其闭包中不包含路由,因为路由是在兄弟函数内定义的。有一些方法可以让它像你期望的那样在路线上闭合,像这样的东西可以起作用:
var route;
function fetchData(filter) {
return $.ajax({
type: "GET",
contentType : "application/json; charset=utf-8",
dataType: "json",
url: "my_url"+route,
data: filter
});
};
function fetchDataSource(filter) {
route = "data_source";
return fetchData(filter);
};
因为路由是在包含 fetchData的范围内定义的,所以它不属于你的。