关于闭包的一些概念和误区

像这种内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。

闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。

def count():
fs = []
for i in range(1, 4):
def test1(j):
def test2():
return j * j
return test2
fs.append(test1(i))
return fs

[f1, f2, f3] = count()
print f1(), f2(), f3()

def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs

f1, f2, f3 = count()

时间: 2024-10-05 08:10:15

关于闭包的一些概念和误区的相关文章

处理器boot的简单概念及误区

研一的时候在S3C6410的开发板上完成了一个简单的bootloader的设计,有一些想法可以顾及到其他处理器的设计上,在这里和大家分享一下. 晚一些的时候我再跟大家讲如何去设计 :) 首先什么叫做bootloader?在我看来,其实bootloader就是一个搬运工,负责将串行或并行flash中的数据搬运至sdram,再将pc指针切换至sdram的映射地址.大家也许会问,8/16位单片机或者CORTEX-M系列的处理器为啥不需要bootloader,在这里其实是有误区的,其实这些处理器也是有b

深入理解Lua的闭包一:概念和应用

本文首先通过具体的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理.   闭包的概念 在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会访问的非局部变量,那么它就是通常说的函数.也就是说,在Lua中,函数是闭包一种特殊情况.另外在L

深入理解Lua的闭包一:概念、应用和实现原理

本文首先通过具体的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理.   闭包的概念 在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会访问的非局部变量,那么它就是通常说的函数.也就是说,在Lua中,函数是闭包一种特殊情况.另外在L

闭包_1(概念)

嗯,闭包,我只知道一个函数包一个函数(有个卵用啊!摔) 1.先说作用域. js没有块级作用域,但js有函数作用域 js有全局变量和局部变量 定义在函数内部的变量在函数外部是访问不到的,这就是局部变量. 提前定义在函数外部的变量是可以在函数内部访问到,这就是全局变量. 2.如果我就想在外边获取到函数内部的变量怎么办呢? 那我就在函数1中再放一个函数2,函数2用来将函数1中定义的值暴露出来. 这就是闭包. 原文地址:https://www.cnblogs.com/yaooo/p/12422925.h

javascript中重要概念-闭包-深入理解

在上次的分享中javascript--函数参数与闭包--详解,对闭包的解释不够深入.本人经过一段时间的学习,对闭包的概念又有了新的理解.于是便把学习的过程整理成文章,一是为了加深自己闭包的理解,二是给读者提供学习的途径,避免走弯路. 在javascript--函数参数与闭包--详解这篇文章中,我详细介绍了闭包的概念.以下的分享对闭包的基本概念只会稍稍带过.如果对闭包的概念不熟悉的同学,请移步至javascript--函数参数与闭包--详解. 以下的分享会分为如下内容: 1.let命令 2.闭包特

js闭包概念

含义:闭包是一个概念,它描述了函数执行完毕内存释放后,依然内存驻留的一个现象,只要把握这个核心概念,闭包就不难理解了 function a(){     var i=0;     function b(){       alert(++i);       }     return b;   }   var c = a();   c(); 即,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量. 由于闭

Javascript 闭包浅析(一)

闭包 对于Javascript程序员来说,闭包(closure)是一个难懂又必须征服的概念.闭包的形成与变量的生存周期密切相关. 变量的作用域变量的作用域,指变量的有效范围.我们最常谈到的是在函数中声明的变量作用域.当在函数中声明一个变量的时候,如果该变量前面没有带上关键在var,这个变量就会成为全局变量,这当然是一种容易造成命名冲突的做法.(ES5严格模式下报错)另一种情况是用var关键字在函数中声明变量,这时候的变量既是局部变量,只有在该函数内部才能访问到这个变量,在函数外面是访问不到的.在

js之认识闭包

本文采用5W1H分析法来看一下闭包. 一.why-----从为什么要引入闭包先来了解一下闭包. 讨论为什么要引入闭包就要先讨论一下js中的作用域链及垃圾回收机制. 熟悉js语言的人都知道js中有作用域的概念和垃圾回收机制.那么我们首先来看一下js中的作用域链 作用域链: js中的变量执行环境分为全局执行环境和局部执行环境.当代码在执行时会创建变量对象的一个作用域链.而作用域链简单来说,就是函数在定义的时候创建的上下文执行环境,用于在标识符解析中变量查找.作用域链的前端始终都是当前执行代码所在环境

javascript 闭包的理解

看过很多谈如何理解闭包的方法,但大多数文章,都是照抄或者解释<Javascript高级程序设计(第三版)>对于闭包的讲解,甚至例程都不约而同的引用高程三181页‘闭包与变量’一节的那个“返回数组各个项,结果各个项的值都相同”的例程,还有些文章的讲解过程上一步与下一步之间的跨度简直就是一步登天,让人反复看半天都无法理解. 闭包的理解需要很多概念做铺垫,包括变量作用域链.执行环境.变量活动对象.引用式垃圾内存收集机制等,如果对本文涉及的这些概念不理解,可以去找本<Javascript高级程序