Home > Web Front-end > JS Tutorial > body text

Detailed explanation of closure in javascript_javascript skills

WBOY
Release: 2016-05-16 15:21:34
Original
1206 people have browsed it

In JavaScript, a function can be regarded as a kind of data, which can be assigned to a variable and nested in another function.

var fun = function(){
  console.log("平底斜");
}

Copy after login
function fun(){
  var n=10;
  function son(){
    n++;
  }
  son();
  console.log(n);
}
fun(); //11
fun(); //11

Copy after login

Let’s slightly modify the second piece of code above:

var n=10;
function fun(){
  function son(){
    n++;
  }
  son();
  console.log(n);
}
fun(); //11
fun(); //12

Copy after login

Do you see the difference? If you can’t understand the code execution results, please read the previous blog post for an explanation of JavaScript scope and scope chain.

The variable n in the above code is a global variable and may be reassigned at any time without calling the fun function. In order to prevent variable n from being polluted, or to reduce the pollution of global variables, we need to put n in the function as a local variable.

function fun(){
  var n=10;
  function son(){
    n++;
    console.log(n);
  }
  son();
}
fun(); //11
fun(); //11

Copy after login

If we can directly call the son function globally, we can achieve the desired effect. The son function now exists as a local variable. If you want to access it globally, there are generally two methods:

One is to assign values ​​to global variables

var a;
function fun(){
  var n=10;
  a = function son(){
    n++;
    console.log(n);
  }
}
fun(); //son()
a(); //11
a(); //12

Copy after login

The other is to use return to return the value

function fun(){
  var n=10;
  return function son(){
    n++;
    console.log(n);
  }
}
var a=fun();
a(); //11
a(); //12

Copy after login

The son() function above is a closure. In a sense, all functions can be regarded as closures. A closure is a function that can access variables in the scope of the outer function.

var a;
function fun(){
  var n=10;
  a = function son(){
    n++;
    console.log(n);
  }
  return a();
}
fun(); //11
a(); //12
a(); //13
fun(); //11
a(); //12
a(); //13

Copy after login

It’s still the above code. Let’s modify it slightly and look at the execution results. This is because the variable n will be initialized every time the fun() function is executed.

The advantage of closure is to reduce global variables, avoid global pollution, and save local variables in memory. But this is both an advantage and a disadvantage. If there are too many closures in a piece of code, it may cause memory leaks. Since the local variables in the closure will not be recycled by the garbage collection mechanism, they need to be manually assigned to null (regarding memory leaks, a separate topic will be opened later)

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!