课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在学习JavaScript编程开发语言的时候会接触到关于闭包的概念,但是其他的编程语言中是没有这个东西的。今天,我们就一起来简单了解一下这个东西的一些基础知识。下面就开始今天的主要内容吧。
为啥js中有闭包这个东西,其他后台语言里没有?
当一个函数调用时,内部变量的查找会按作用域链条来查找,按理说不会有啥特殊情况出现,js之所以会出现闭包这个现象,原因就是你调用的这个函数是另外一个函数的返回值。
说到函数能作为返回值,这是跟js中函数类型是其一类对象这种语言设计方式有关,我会先介绍其一类对象对js的编码风格的影响。当然你直接可以看其二部分,关于闭包的说明。
其一部分
啥是其一类对象呢,我帮你百度了。
其一类对象不一定是面向对象程序设计所指的物件,而可以指任何程序中的实体。一般其一类对象所特有的特性为:
可以被存入变量或其他结构
可以被作为参数传递给其他函数
可以被作为函数的返回值
可以在执行期创造,而无需完全在设计期全部写出
即使没有被系结至某一名称,也可以存在
在js中object类型就是其一类对象。你能怎么使用object类型。就怎么能使用function类型。这里先说一下js中函数的四大作用
可以调用执行。程序世界里,函数的基本作用就是可复用代码段的封装,可以直接调用。
可以按照对象的使用方式来使用。原因就是js中函数类型是其一类对象。准确的来说js中函数本身就是对象。对象能做啥,他当然也能做。
可以提供作用域。js中没有块级作用域的概念。函数是提供作用域的小单位。
可以作为构造函数。这一作用算是函数的特殊作用。可以作用生成其他对象的模板。也就是可以通过函数来模拟类的实现。
其二部分
现在还是说说为啥出了个闭包这个东西,原因就是你调用的那个函数是另一个函数的返回值,当外部调用时,会沿着这个返回值的函数作用域链条来找其内部相关变量的。
先大致说下作用域链条的问题。函数中识别变量,是一层层向外找的,先在函数内部找,看看是不是内部声明的,然后再到上一层找,没找到,再往上,直到全局作用域。如果全局页面都没声明,那浏览器就报错了。这一层层中的层是什么东西呢,就是函数,因为函数提供小的作用域。
作者:知乎其微
节选:前端社区
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。