如何理解闭包这一概念

Python016

如何理解闭包这一概念,第1张

通俗的说,闭包就是函数嵌套函数,并且函数被作为函数的返回值。

闭包是指可以包含自由(未绑定到特定对象变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。在PHP、Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。

闭包的理解:闭包就是能够读取其他函数内部变量的函数。

闭包是一种保护私有变量的机制,函数执行时形成私有作用域,保护私有变量不受外界影响。内部函数可以使用外部函数的参数和变量,函数和变量不会被垃圾回收机制回收。

闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。

作用是:匿名自执行函数:我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处,如:别的函数可能误用这些变量;造成全局对象过于庞大,影响访问速度(因为变量的取值是需要从原型链上遍历的)。

闭包对页面的影响:

1、防止全局污染。

2、内部的函数可以用外部的变量或参数。

3、内部的变量不会被垃圾回收机制回收。

4、闭包可以更新外部的变量的值。

5、用闭包可以模拟私有方法。

6、由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成页面性能的问题;闭包和全局变量一样,如果大量使用可能会造成内存泄漏。