函数的嵌套和作用域链,闭包

Posted yuexijun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的嵌套和作用域链,闭包相关的知识,希望对你有一定的参考价值。

 函数嵌套:  #指在第二个函数里面调用第一个函数的结果

def func():

  print(‘sss‘)

def func1(f):

  f()

func1(func)

作用域链:   #最内层的函数可以调用并且更改其他函数内的代码变量但是只限制于函数这个作用域内的变量  全局的变量不能被内部函数调用 否则会报错

        #除非声明global 全局变量  全局变量一般不会经常使用 因为会影响整个局面

        

def func():

  a = 1

  def func1():

   a +=1

   print(a)

  func1()

func()

其中函数名字可以作为参数的实参,也可以赋值给其他变量,也可以作为容器名字也就是内存地址

globals 无论放在函数外边还是里边它都是查找全局的内存地址

locals  放在某个函数的里边查找的是这个函数内的所有变量  如果放在函数的最外边则与globals一样差的是全局内的所有变量

闭包:

def func():

    a = 1

  def func1():

    print(a)

  return func1

aa  = func()

aa()

#  闭包必须嵌套函数 ,也必须是内部函数调用外部函数的变量

#闭包的好处是避免一个函数执行结束后会释放前面的变量或者代码 不用重复定义某个变量,节省内存

 

以上是关于函数的嵌套和作用域链,闭包的主要内容,如果未能解决你的问题,请参考以下文章

实现闭包(摘录自 权威指南184页)

javaScript闭包

执行环境 作用域 作用域链 闭包的理解

javascript 作用域链及闭包,AO,VO,执行环境

如何理解和应用闭包

作用域链闭包和原型链