Es wird gesagt, dass es bei Alibabas Campus-Rekrutierung in diesem Jahr eine Frage gibt, die einen Wissenspunkt testet, und zwar den this-Zeiger in der Parameterfunktion von setInterval.
Als ich diese Frage sah, war ich verwirrt, weil ich das Problem damals nicht geklärt hatte. Ich habe lange darüber nachgedacht und konnte es dann nicht herausfinden Der Gültigkeitsbereich der Funktionen nach setInterval und setTimeout ist global, das heißt, dieser Insider zeigt auf das globale Objekt.
Dieses Problem ist oft problematisch, um auf das aktuelle Objekt in der Schleifenfunktion zu verweisen, aber die tatsächliche Situation ist nicht so einfach.
Mein Wunsch ist es, dass diese Funktion in der Schleife immer noch auf das Objekt des aktuellen Kontexts zeigt, ohne Parameter oder einen Abschluss zu übergeben (tatsächlich ist dies auch ein Abschluss, sieht aber in der Form natürlicher aus);
Zum Beispiel: (Ein Teil des Codes wird verwendet, um regelmäßig Anfragen zu senden.)
1 var sendRequest=function(){}
2 sendRequest.prototype={
3.................................................
4 .................................
5 beginSend:function(){
6 // Diese Funktion in der Schleife auf dieses Objekt und nicht auf das globale Objekt verweisen lassen
7 this.loop_send=setInterval((function(param){
8 return function(){param.sendARequest();}
9 })(this),this.options.interval);
10},
11 sendARequest:function(){
12 this.num++;
13 this.checkLimit();
14 var Rückruf = {
15 Erfolg: this.handleSuccess,
16 Fehler: this.handleFail,
17 Argument: {
18 Griff: dieser,
19 Zeitüberschreitung: 500
20}
einundzwanzig }
22 var post_data="...."
23 // Wenn die zu sendenden Daten nicht leer sind, wird ein Datenelement herausgenommen und an den Hintergrund gesendet
24 if(this.data_wait_for_send.length!=0){
25 for(var i=0,j=this.data_wait_for_send.length;i<j;i++){
26 post_data+="&content[]="+this.data_wait_for_send[i];
27}
28 this.data_wait_for_send=[]
29 }
30 //debug(post_data)
31 var que = Connect.asyncRequest('POST', this.options.getUrl, callback,post_data);
32},
33.................................
34.................................
35}
36
-