zoukankan      html  css  js  c++  java
  • Python/JS 闭包

    闭包是什么?

      闭包就是能够读取其他函数内部变量的函数,

      或者简单的说,就是在函数中再定义一个函数,

      内部的函数引用了外部的函数的变量。

    Python

    >>> def add_list(*args):
    	def add():
    		sum = 0
    		for n in args:
    			sum += n
    		return sum
    	return add
    

      相关参数和变量都保存在返回的函数

    >>> f = add_list(1,2,3,4,5,6,7)
    >>> f()
    28
    

      闭包中内部函数始终使用外部变量的最终值,

           引用的外部变量没有到最终值,内部函数不会返回

    >>> def my_example():
    	L = []
    	for i in range(4):
    		def add():
    			L.append(i)
    			return i
    	return L
    >>> my_example()
    []
    

      执行过程是:不断循环,然而不执行内层def里面的语句

      结果返回了[]

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

     显示:

    9
    9
    9
    

      结果并不是1,4,9

      理由也是因为i会改变

    JavaScript

    function compare(i) {
        return function(o1, o2) {
            return o1[i] - o2[i]
        }
    }

    通过匿名函数创建闭包

    创建的比较函数保存在下面的cmp中,

    匿名函数作用域链就存在

    所以闭包有可能占用内存过多

    var cmp = compare(1)
    var result = cmp([1,2,3,4], [2,3,4,5])
    console.log(result)
    > -1
    

      JS闭包中使用匿名对象时,

      this通常指向window

  • 相关阅读:
    hdu5091(线段树+扫描线)
    hdu2874(tarjan)
    hdu4252
    poj2452(RMQ+二分)
    Dragon Balls HDU
    CF803
    poj1962(带权并查集)
    hdu2818(带权并查集)
    GitHub入门之一:使用github下载项目 .
    (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间
  • 原文地址:https://www.cnblogs.com/kwebi/p/9134901.html
Copyright © 2011-2022 走看看