闭包:在计算机科学中,闭包,又称词法闭包或函数闭包,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。(引用维基百科)
闭包形式就是函数内嵌套函数,体现在一个内函数可以使用另一个外函数内的变量
传统的函数里的变量,会有垃圾回收机制,在调用之后所有的函数内的变量就会被销毁。
在我们需求需要一些变量能够保存而不被垃圾回收的情况下就需要用到闭包的情况。
优缺点:
优点:它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
缺点:1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
柯里化:在 计算机科学 中, 柯里化 (英语:Currying),又译为 卡瑞化 或 加里化 ,是把接受多个 参数 的 函数 变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由 克里斯托弗·斯特雷奇 以逻辑学家 哈斯凯尔·加里 命名的,尽管它是 Moses Schönfinkel 和 戈特洛布·弗雷格 发明的。(引用维基百科)
好处:参数复用,延迟执行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)