This question already has answers here:
What is the scope of variables in JavaScript?
                            
                                (25个答案)
                            
                    
                2年前关闭。
        

    

我是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:路由未定义
      在fetchData(:6:49)
      在fetchDataSource(:3:10)
      在:1: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);
};


因为route是在此处包含fetchData的范围中定义的,而不在您的范围中。

09-25 16:03