闭包

闭包

闭包是嵌套函数中作用域归属的一种体现

def outer():
    name = "我是外部函数的变量"
    def inner():
        print(name)
    return inner  # 注意返回的是函数名,不带括号.这里只是返回inner的内存地址,并未执行

f = outer()
f() # 相当于执行的是inner()
输出结果:我是外部函数的变量

对于这种现象有何感想:

现象:

  • outer()函数内部嵌套定义的内部函数inner()调用了outer的变量
  • outer()函数没有调用内部函数inner(),而是通过return的方式返回到函数outer()外部
  • 注意,函数outer()返回的是 inner,而不是inner(),因此并没调用内部函数inner()
  • 内部函数inner()在外部函数outer外被调用,即调用 f()
  • 此时,按理说outer函数已经通过return的使用,结束了其自身的,释放了其内存空间,即name亦被释放
  • 但是,程序的执行结果却表明,name依然存在且被调用执行

解释:

  • 闭包的原因:
  • 返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
上一篇:SQL中join的用法解析(inner join、full out join、left join)


下一篇:jquery --入门