Sunday 8 December 2019

How to understand closures in Javascript?


closure is a function bound to one or more external variables



An example of this concept is that the function bar is bound to the external variables x, y, and z:


function foo(x, y) {
var z = 3;
return function bar(a, b, c) {
return (a + b + c) * (x + y + z);
};
}
var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24

The variable closure refers to the inner function bar returned from the call to foo. Invoking closure is like reentering the scope within foo, which gives visibility into all of foo's local variables and parameters.



even after the parent function has terminated



This means that after foo is executed, the returned function stored in the closure variable persists the state of foo. You can even create multiple independent closures by invoking foo again:


var closure = foo(1, 2);
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24
var closure2 = foo(0, 0);
closure2(5, 6, 7); // (5 + 6 + 7) * (0 + 0 + 3) = 21
/* closure2 does not affect the other closure */
closure(5, 6, 7); // (5 + 6 + 7) * (1 + 2 + 3) = 24

No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...