js闭包和python闭包

闭包概念

  • 变量分为:全局变量和局部变量,js中函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。闭包就可以将函数的内部变量被外部访问

js闭包

function count() {
			var funs = []				
			for (var i =0; i<4; i++) {
				function f(){  		//闭包函数
					return i*i;
				}
				funs.push(f)
			}
			return funs;
		}

		$(function() {
			var cfun = count()  //获取的是内部函数
			
			for(var k in cfun){
				console.log("-------")
				console.log( cfun[k]()  )					
			}
		})

输出结果为相同的值。原因再后面解释。

	-------
	16
	-------
	16
	-------
	16
	-------
	16

python的闭包

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

fun = count1()
print(fun)
print(fun[0]())
print(fun[1]())
print(fun[2]())

输出结果也是相同的值

[.f at 0x012856A8>, .f at 0x01285978>, .f at 0x01285930>]
9
9
9
  • 输出相同值得解释

用js的debug解释原因。

  • 第一次和最后一次的debug
    js闭包和python闭包_第1张图片
    js闭包和python闭包_第2张图片
    再闭包完成后,变量i的值变成了4。
    js闭包和python闭包_第3张图片
    标志出调用的是函数的内部变量,此时的内部变量的值为4,所以结果是一致的。

你可能感兴趣的:(前端,python)