欢迎光临散文网 会员登陆 & 注册

千锋教育JavaScript全套视频教程(10天学会Js,前端javascrip

2023-07-21 09:16 作者:bili_18197036137  | 我要投稿

js闭包的理解

什么是闭包?

闭包(closure):是指函数与其周围的状态(lexical environment 词法环境)的组合。通俗的理解是一个内部函数引用了外部函数的变量,此时外部函数就形成了一个闭包。下面就是一个简单闭包的写法。

function box() {

        var a = 1

        return function () {

          console.log(a);

          return a

        }

      }

      let resFn = box()

      resFn()

 闭包的写法

 根据上面的简单案列,我们对闭包已经有了初步的认识。闭包的写法必须具有以下两点。

1.函数嵌套体。

2.内部函数可以访问外部函数的变量

闭包的原理

1.垃圾回收机制

  垃圾回收机制就是浏览器内存回收机制的一种算法。垃圾回收机制就是不停歇地查找那些不在使用的局部变量,并释放掉它所指向的内存。最早使用的垃圾回收机制的算法是 ——引用计数器算法,因为这种算法存在缺点,容易造成内存泄漏。目前已经基本不使用了。目前使用的垃圾回收机制是——标记清除法:它标记能被全局所使用的变量。被标记的变量不会被清除。

作用域链

 内部函数使用变量的时候会先在自身去查找,自身没有的话就去父级作用域去查找。

闭包的特点

1.闭包的优点

(1)局部变量常驻内存,像全局变量一样常驻内存,不会污染全局命名空间。

(2)产生私有变量(内部函数调用外部函数的变量,此时这个变量就会变成内部函数的私有变 量)

2.闭包的缺点

(1)使用不当的话容易造成内存泄露(解决办法就是我们在不使用的时候手动赋值为null)。

(2)内存占用比较大,浪费内存。

经典闭包

 function fn() {

          let a = 1

          return function () {

            a++

            return a

          }

        }

        let newFn = fn()

        console.log(newFn());

        console.log(newFn());

        console.log(newFn());

千锋教育JavaScript全套视频教程(10天学会Js,前端javascrip的评论 (共 条)

分享到微博请遵守国家法律