搜索
写经验 领红包
 > 旅游

闭包是什么面试题(前端面试谈谈对闭包理解)

导语:面试必备的一个小知识点——闭包

闭包是什么 面试题(前端面试谈谈对闭包理解)

你是不是野路子,基础到底扎实不扎实,这个问题,只要面试官一问,答案自然就知道了。

你试试问问自己,闭包你知道吗?

闭包是个什么东西?

关于闭包,即一个函数定义和函数表达式位于另一个函数的函数体内(嵌套函数),而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数等,当其中一个这样的内部函数,在包含它们的外部函数之外被调用时,就会形成闭包。

也就是说内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必须访问其外部函数的局部变量参数,以及其他内部函数。

这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。

函数的作用域

大家可能都知道,当一个函数被执行的时候,函数就会在内存中开辟空间,来作为存放变量地址等的地方,等函数执行结束后,内存空间被释放掉。

而这里就有一个很奇怪的现象。当外部函数被调用时,并没有释放掉原有的内存空间,这是为什么呢?

案例解析

咱们举个例子看一下。

34;I am variable of outer&调用外部函数并执行f = outer()print(f)运行结果 D:/python/python_210710/exercise/闭包.py<function outer.<locals>.inner at 0x0000024C61CA7280>Process finished with exit code 0

很显然,当函数outer被调用执行时,返回的依然是一个地址。

我们再做进一步尝试。

34;I am variable of outer&调用外部函数并执行f = outer()print(f)f() 

f()是否会报错呢?

运行结果

D:/python/python_210710/exercise/闭包.py

<function outer.<locals>.inner at 0x0000017538427280>

I am variable of outer

Process finished with exit code 0

注意此时 outer函数已经执行完毕,正常情况下 outer里的存都已经释放了,但此时由于闭包的存在,我们却还可以调用 inner,即outer函数的返回值,并且还调用了上一层 outer的变量,这种奇怪的现象就是闭包。

闭包的意义

闭包的意义,返回的函数对象,不仅仅是一个函数对象,在该函数外还包含了一层作用域,这使得该函数无论在何处调,都可以使用自己外面包裹的作用域。

简单地讲就是调用外部函数返回的依然是一个函数,而这个函数依然可以继续访问这个函数之外的变量。

闭包有什么用呢?

延伸一下,闭包的使用场景,就是装饰器中使用,装饰器是Python里面一个非常常用的点,预知装饰器是什么?

下回分解。

本文内容由快快网络小碧创作整理编辑!