带有回调的变量作用域-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是的。您可以使用闭包,而不是两个函数都可以访问的变量