What difficulty exactly closure resolved in javasc

2019-09-20 20:09发布

问题:

I am working in javaScript from last 3 months, but not able to understand something about closures :

  1. What problem exactly closure resolved in this language ?
  2. When should I use closure ?
  3. Is it related to performance or only case of best practice ?

I read How do JavaScript closures work? , which have pretty good explanation but I am not able to get answes of above questions.

回答1:

Here is a closure example:

var items = ["a","b", "c"];
var displayItem = function (i) {
    return function () {
        alert(items[i]);
    }
}

for (var i = 0; i < items.length; i++) {
    window.setTimeout(displayItem(i), 100);
}
  1. A closure keeps the context information of a function. In this example the closure keeps the number if the counter and the items array. If I wouldn't use the closure the conter would have changed and all alerts would show undefined (var i whould be 3).

  2. You are using closures and you may have not noticed. There are no rules of when to use them. When declaring functions inside other functions you are creating closures. In this example I created a closure with just the data I needed. But the displayItem function has created a closure that allows him to acces to the items array.

  3. Using closures may have performance issues because you're forcing the browser to keep more data in memory. So people doesn't use it for performance and nor as a best practice, it is simply an other tool to solve some problems.