闭包的概念与不闭包的区别(JavaScript)

Posted 曾胖神父

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包的概念与不闭包的区别(JavaScript)相关的知识,希望对你有一定的参考价值。

闭包的概念

函数执行完后,其作用域就会被清理,局部变量会被回收。如果函数内声明了子函数,且该子函数暴露给全局作用域导致其一直
无法被回收。由于子函数可以访问上级作用域中的变量,导致即使上级函数执行完,上级函数作用域下被子函数使用的局部变量也不会销毁,我们把这个子函数连同其使用的上级作用域的局部变量成为闭包

什么是闭包

简单点说一个函数内部如果引用了一个既不是函数内部局部变量,也不是该函数参数的变量,这样就会形成一个闭包。

闭包与不闭包的区别

举个例子来比较。

//未闭包代码
function Test1()

  return Test1;


//闭包代码
function Test2()

  let a=0;
  function Test3()
  
    console.log(a++);
  
  return Test3;

let Test1_Result1=Test1();
let Test1_Result2=Test1();
let Test2_Result1=Test2();
let Test2_Result2=Test2();
console.log(Test1_Result1===Test1_Result2);//结果为true
console.log(Test2_Result1===Test2_Result2);//结果为false

从输出结果就能看出,闭包与未闭包最大的区别,每个闭包函数是相互独立的,互不影响。利用闭包这个特性,就可以实现数据的封装与私有属性。

以上是关于闭包的概念与不闭包的区别(JavaScript)的主要内容,如果未能解决你的问题,请参考以下文章

从作用域链谈闭包

Javascript 闭包 vs PHP 闭包,有啥区别?

JavaScript 闭包和 JavaScript 的区别? [关闭]

JS闭包的概念

javascript 闭包

闭包原来并没有那么难!一文带你深入理解JavaScript的闭包