JavaScript闭包:未被引用的引用

时间:2018-03-15 18:28:27

标签: javascript closures

我是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

为什么路线在我的功能中不可见?

由于

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的范围内定义的,所以它不属于你的。