How browser Event loops work
The browser has an event loop that checks the event queue, handles deferred events, UI events (such as clicks, scrolling, and so on), Ajax callbacks, and callbacks provided to settimeout () and SetInterval (), which are sequentially processed by the event loop.
Therefore, when the settimeout () function is called, the provided callback is queued even if the delay is set to 0
The callback stays in the queue until the specified time runs out, and the engine starts to execute the action (if it does not currently perform another action)
Therefore, even if the settimeout () callback is delayed by 0MS, it will still be queued and will not execute until the other non-deferred statements in the function have been executed.
Talking about the comprehension of Nodejs programming from an interview test problem
Original title Link:
Https://cnodejs.org/topic/55145859e26684ed7ff21bd3
1 varvalue1 = 0, value2 = 0, value3 = 0;2 for(vari = 1; I <= 3; i++) {3 varI2 =i;4(function() {5 vari3 =i;6SetTimeout (function() {7Value1 + =i;8value2 + =I2;9Value3 + =i3;Ten}, 1); One })(); A } -SetTimeout (function() { - Console.log (value1, value2, value3); the}, 100);
Depending on how the browser event loop works above, you know:
- The SetTimeout () function is placed in the event queue and is not run until the other non-deferred statements have finished executing.
Analytical:
Function Variable Scope
Value1 Analysis:
In the anonymous function in the settimeout () function
1 function () {2 value1 + = i; 3 value2 + = i2; 4 Value3 + = i3; 5 }
I used the I variable, but the I variable in the settimeout () function in the anonymous function is not defined, so look out, in the settimeout () function is not defined, and then look out for .... Until the for loop is found, but at this point the for loop has been executed, and the value of I is 4;
So the value of value1 is 4+4+4 = 12;
Value2 Analysis:
Similarly, when the settimeout () function executes, the FOR loop is executed. The value of the variable i2 is the value of the I that last entered the loop. That is: 3,3,3 (because when the value of I is 4, it does not satisfy the condition of entering the loop (I <=3)), then: The value of value2 is 3+3+3 = 9
For the value of Value3, it is 1+2+3 = 6;
VALUE3 Analysis:
1 (function() {2 var i3 = i; 3 setTimeout (function() {4 value1 + = i; 5 value2 + = i2; 6 Value3 + = i3; 7 }, 1); 8}) ();
Using an immediately executed function to create a layer closure, this time I as a variable value assigned to the i3, the function is executed immediately, i3 save the value of each;
JavaScript closures and Function variable scopes