带有回调的变量作用域-JavaScript

带有回调的变量作用域-JavaScript,javascript,promise,Javascript,Promise,在下面的代码中 window.onload = function(){ function cb(resolve, reject){ var http = new XMLHttpRequest(); http.open(url); http.onload = 1; http.onerror = 2; //http.send(); } function get(url){ return new Promise(cb); } };

在下面的代码中

window.onload = function(){

  function cb(resolve, reject){
    var http = new XMLHttpRequest();
    http.open(url);
    http.onload = 1;
    http.onerror = 2;
    //http.send();
  }

  function get(url){
    return new Promise(cb);
  }

};


如果没有匿名回调,名称
url
如何在
cb
中可见?

将不可见,因为它是在函数
get
中定义的。您不能在该范围之外访问它

我可以提出一个解决方案。调用
cb
并传递
url
。此
cb
函数将返回具有实际
cb
逻辑的函数,并且可以访问
url
参数。多亏了

window.onload=function(){
函数cb(url){
返回函数(解析、拒绝){
var http=new XMLHttpRequest();
http.open(url);
http.onload=1;
http.onerror=2;
//http.send();
};    
}
函数get(url){
返回新承诺(cb(url));
}

};但是,
新承诺(/*exécuteur*/函数(解析,拒绝){…})注意。我已经打电话给Promise(cb(url))
是的,我的错。道歉所以,闭包是解决方案。@overexchange是的。您可以使用闭包,而不是两个函数都可以访问的变量