2017-11-21 3 views
-1

Im folgenden Code,Variable Scoping mit callbacks- JavaScript

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); 
    } 

}; 

Ohne einen anonymen Rückruf, wie Name url in cb sichtbar sein?

Antwort

3

Es ist nicht sichtbar, da es in der Funktion get definiert ist. Sie können nicht außerhalb dieses Bereichs darauf zugreifen.

Eine Lösung, die ich vorschlagen kann. Rufen Sie die cb und übergeben Sie die url. Diese cb-Funktion gibt eine Funktion mit der aktuellen cb-Logik zurück und kann auf den Parameter url zugreifen. Danke an closure.

window.onload = function() { 
 

 
    function cb(url){ 
 
    return function(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)); 
 
    } 
 

 
};

+0

Aber 'neue Promise (/ * exécuteur */function (resolve, ablehnen) {...});' – overexchange

+2

aufmerksam sein. Ich habe 'Promise (cb (url))' –

+0

Ja, mein schlechtes genannt. Entschuldigung. Also, Closure ist die Lösung. – overexchange