JS-Verschlüsse und Timer

php中世界最好的语言
Freigeben: 2018-03-08 15:10:29
Original
2210 Leute haben es durchsucht

Dieses Mal bringe ich Ihnen JS-Verschlüsse und Timer Was sind die Vorsichtsmaßnahmen bei der Verwendung von JS-Verschlüssen und Timern?

Was ist ein Abschluss? Was macht er?
Ein Abschluss ist eine Funktion, die die internen Variablen anderer Funktionen lesen kann.
Funktion: 1. Sie können die Variablen innerhalb der Funktion lesen. 2. Die Werte dieser Variablen im Speicher behalten.

Welche Rolle spielt setTimeout 0?
Die JS-Ausführung basiert auf einem einzelnen Thread. Dies bedeutet, dass bei der Ausführung eines Codeabschnitts andere Codes in die Warteschlange gestellt werden, um zu warten, und nachfolgende Codes ausgeführt werden, sobald der Thread frei ist. Wenn im Code ein setTimeout festgelegt ist, fügt der Browser den Code zum entsprechenden Zeitpunkt in die Aufgabenwarteschlange ein. Wenn diese Zeit auf 0 gesetzt ist, bedeutet dies, dass er sofort in die Warteschlange eingefügt, aber nicht ausgeführt wird Sie müssen immer noch warten, bis der vorherige Code abgeschlossen ist (tatsächlich gibt es eine Verzögerung, je nach Browser beträgt sie 16 ms oder 4 ms). Daher garantiert setTimeout nicht die Ausführungszeit. Ob die Ausführung rechtzeitig erfolgt, hängt davon ab, ob der JavaScript-Thread überfüllt oder inaktiv ist.

Code

Was ist die Ausgabe des folgenden Codes? Ändern Sie den Code so, dass fnArr[i]() i ausgibt. Verwenden Sie mehr als zwei Methoden

var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] =  function(){
return i;
};
}
console.log( fnArr3 );  //
Nach dem Login kopieren

Code:
Methode eins:

var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] =  (function(){
var index = i;
var fn = function(){
return index
}
return fn
}());
}
console.log( fnArr3 );  //
Nach dem Login kopieren

Methode zwei:

var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(n){
fnArr[i] = function(){
return n;
}
})(i)
};
console.log( fnArr3 )
Nach dem Login kopieren

Verwenden Sie einen Verschluss, um ein Autoobjekt zu kapseln. Sie können den Auto-Status auf folgende Weise erhalten

var Car = //todo;
Car.setSpeed(30);
Car.getSpeed(); //30
Car.accelerate();
Car.getSpeed(); //40;
Car.decelerate();
Car.decelerate();
Car.getSpeed(); //20
Car.getStatus(); // &#39;running&#39;;
Car.decelerate();
Car.decelerate();
Car.getStatus();  //&#39;stop&#39;;
//Car.speed;  //error
Nach dem Login kopieren

Code:

var Car = (function(){
var speed;
function setSpeed(n){
speed = n
}
function getSpeed(){
return console.log(speed);
}
function accelerate(){
speed +=10
return speed;
}
function decelerate(){
speed -=10
return speed;
}
function getStatus(){
return console.log(speed===0?&#39;stop&#39;:&#39;running&#39;);
}
return {
setSpeed:setSpeed,
getSpeed:getSpeed,
accelerate:accelerate,
decelerate:decelerate,
getStatus:getStatus,
}
}());
Car.setSpeed(30);
Car.getSpeed(); //30
Car.accelerate();
Car.getSpeed(); //40;
Car.decelerate();
Car.decelerate();
Car.getSpeed(); //20
Car.getStatus(); // &#39;running&#39;;
Car.decelerate();
Car.decelerate();
Car.getStatus();  //&#39;stop&#39;;
Car.speed();  //error
Nach dem Login kopieren

Schreiben Sie eine Funktion, um setTimeout zu verwenden, um die Funktion von setInterval zu simulieren
Code:

var i=0;
function intv(){
setTimeout(function(){
console.log(i++);
intv();
},1000);
}
intv();
Nach dem Login kopieren

Schreiben Sie eine Funktion, um die minimale Zeitgranularität von setTimeout zu berechnen
Code:

function getmin(){
var i = 0;
var start = Date.now();
var clock = setTimeout(function(){
i++;
if(i === 1000){
clearTimeout(clock);
var end = Date.now();
console.log((end-start)/i)
}
clock = setTimeout(arguments.callee,0)
},0)
}
getmin()
Nach dem Login kopieren

Was ist das Ausgabeergebnis des folgenden Codes?

var a = 1;
setTimeout(function(){
a = 2;
console.log(a);
}, 0);
var a ;
console.log(a);
a = 3;
console.log(a);
Nach dem Login kopieren

Das Ausgabeergebnis dieses Codes ist 1;3;2, weil ein setTimeout ist im Code festgelegt, dann wird der Browser zum richtigen Zeitpunkt in die Aufgabenwarteschlange eingefügt. Wenn dieser Zeitpunkt auf 0 gesetzt ist, bedeutet dies, dass er sofort in die Warteschlange eingefügt, aber nicht sofort ausgeführt wird . Es muss noch auf die Ausführung des vorherigen Codes gewartet werden, daher muss setTimeout ausgeführt werden, nachdem der gesamte Code ausgeführt wurde (function(){a = 2;console.log(a);}, 0);.

Was ist das Ausgabeergebnis des folgenden Codes?

var flag = true;
setTimeout(function(){
flag = false;
},0)
while(flag){}
console.log(flag);
Nach dem Login kopieren

gibt das Ergebnis nicht aus, weil setTimeout(function(){flag = false;} ,0) wird ausgeführt, nachdem der gesamte Code ausgeführt wurde. Der Anfangswert von flag ist also true, sodass die Schleife fortgesetzt wird und auf console.log(flag) nicht zugegriffen werden kann. , daher ist es möglich, dass die Ausgabe wahr ist.

Was ist die Ausgabe des folgenden Codes? So geben Sie „Verzögerer: 0“, „Verzögerer: 1 ...“ aus (implementiert mit Schließungen)

for(var i=0;i<5;i++){
setTimeout(function(){
console.log(&#39;delayer:&#39; + i );
}, 0);
console.log(i);
}
Nach dem Login kopieren

Code:

for(var i=0;i<5;i++){
(function(i){
setTimeout(function(){
console.log(&#39;delayer:&#39; + i );
}, 0);
})(i)
console.log(i);
}
Nach dem Login kopieren

Brain-burning-Frage

Was ist das Ergebnis des folgenden console.log? Warum?

function fn(a,b) {
console.log(b);
return {
fn:function(c){
return fn(c,a);
}
};
}
var a = fn(0);
a.fn(1);
a.fn(2);
a.fn(3);
var b = fn(0).fn(1).fn(2).fn(3);
var c = fn(0).fn(1);
c.fn(2);
c.fn(3);
Nach dem Login kopieren

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Verwandte Lektüre:

Einfacher CSS3-Klick-Antwort-Animationsfall

So verwenden Sie Python, um die Bildähnlichkeit zu bestimmen

Das obige ist der detaillierte Inhalt vonJS-Verschlüsse und Timer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage