搜索
写经验 领红包
 > 知识

js中的闭包是什么(js闭包原理使用场景)

导语:闭包!什么是JS中的闭包,什么是PHP中的闭包函数?

JS的闭包:

所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

先看下下面这段代码

这段代码有两个特点:1、函数b嵌套在函数a内部;2、函数a返回函数b。

这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:

当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

①这里首先得说下JS的垃圾回收机制:

在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

②闭包有什么作用呢?

1)可以在全局作用域实现对局部变量的引用

2)可以一直保存我们的变量或函数驻留在内存中,而不会被GC回收

③闭包的应用场景

1、保护函数内的变量安全。以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。

2、在内存中维持一个变量。依然如前例,由于闭包,函数a中i的一直存在于内存中,因此每次执行c(),都会给i自加1。

函数中函数,且该函数捆绑了一些局部变量,又由于全局变量的引用,会导致函数与变量都不会被回收,这就是我眼中的闭包

PHP中的闭包函数

在PHP5.3以后,允许创建匿名函数,中匿名函数,也叫闭包函数( closures ),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)的参数。

用好闭包,可以帮我们

1 减少foreach的循环的代码

2 减少函数的参数

3 解除递归函数

本文内容由小德整理编辑!