快速理解JS闭包

快速理解JS闭包

为了快速理解JS闭包,加强记忆,整理一下JS闭包知识

  • 变量的作用域
  • 如何外部读取函数内部的变量
  • 闭包的概念
  • 闭包的用途
  • 使用闭包的优缺点

详细说明

变量的作用域

变量分为全局变量和局部变量,全局变量即:定义在函数外的变量;局部变量即:定义在函数内的变量。

代码块

 var num1 = 1; // 全局变量
 function test() {
   var num2 = 2; // 局部变量
   num1 = 3; 
   console.log(num2); // 2
   console.log(num1); // 3
 }
 test();
 console.log(num1);  // 3
 console.log(num2); // num2 is not defined

如何外部读取内部的变量

函数里既可以访问全局变量也可以访问局部变量,函数外只可以访问全局变量,如果需要访问局部变量就用到了闭包。

代码块

 var num1 = 1; // 全局变量
 function test() {
   var num2 = 2; // 局部变量
   num1 = 3; 
   console.log(num1) // 3
   return function() {
     return num2
   }
 }
 console.log(test()()) // 2

闭包的概念

满足下面的三个条件就是闭包,1. 闭包是一个函数; 2.闭包使用其他函数定义的变量,使其不被销毁; 3. 闭包存在定义该变量作用域中。即闭包建立起函数内部和函数外部的连接

代码块


 function test() {
   var num1 = 1; 
   return function() {
     num1 += 1;
     return num1;
   }
 }
var test1 = test();
console.log(test1()); // 2
console.log(test1()); // 3
console.log(test1()); // 4

闭包的用途

  1. 读取函数内部的变量 2.让变量的值始终存在内存中

闭包的优缺点

优点: 1.可以使函数内部的变量和函数外部通信 2. 使用常驻内存,意味着读取速度快,变量一初始化可以重复使用
缺点: 1. 函数外部可以改变局部变量的值 2. 当函数调用结束之后,该变量仍然存在内存中,会导致内存泄漏

猜你喜欢

转载自blog.csdn.net/sinat_34798463/article/details/78732211