关于闭包的作用,以及优缺点

定义:闭包 当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行         就产生了闭包.闭包是一个环境,具体指的就是外部函数--高阶函数。

说白了就是一个环境,能够读取其他函数内部的变量。

本质上,闭包是将函数内部和函数外部连接起来的桥梁。

用处:1.读取函数内部的变量;

2.这些变量的值始终保持在内存中,不会在外层函数调用后被自动清除。

优点:1:变量长期驻扎在内存中;

2:避免全局变量的污染;

3:私有成员的存在 ;

特性:1:函数套函数;

2:内部函数可以直接使用外部函数的局部变量或参数;

3:变量或参数不会被垃圾回收机制回收 GC;

缺点:

常驻内存 会增大内存的使用量 使用不当会造成内存泄露,详解:

(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

原文地址:https://www.cnblogs.com/fengrenfan/p/10486844.html

时间: 2024-10-13 10:34:49

关于闭包的作用,以及优缺点的相关文章

js闭包的作用

js闭包的用途详解 js闭包可以用在许多地方.它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中.具体怎么理解呢,各位看官请仔细看好下文 我们来看看闭包的用途.事实上,通过使用闭包,我们可以做很多事情.比如模拟面向对象的代码风格:更优雅,更简洁的表达出代码:在某些方面提升代码的执行效率. 1 匿名自执行函数 我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处,比如:别的函数可能误用

JavaScript ---- 闭包(什么是闭包,为什么使用闭包,闭包的作用)

经常被问到什么是闭包? 说实话闭包这个概念很难解释.JavaScript权威指南里有这么一段话:"JavaScript函数是将要执行的代码以及执行这些代码作用域构成的一个综合体.在计算机学术语里,这种代码和作用域额综合体叫做闭包.".言外之意所有的JavaScript函数都是闭包. 有人会说,这个解释不对.我们经常说的闭包应该像下面的一串代码: var f1 = function(){ var a=1; return function f2(){ a++; alert(a) } } v

javascript闭包以及闭包的作用

什么是闭包?--->是一个函数,一个可以访问其他函数内部数据的函数. 栗子一: function foo() { var a = 1; } function fn() { console.log(a);//报错,因为这里是无法访问到a的 } function foo() { var a = 1; function fn() { console.log(a);//这样是可以访问到a的 } return fn;//fn就是闭包,其在foo内部调用没有意义,所以将其返回,交由外部来决定调用时机,更具开

JS闭包的基础知识,闭包的本质,闭包的作用,闭包的间谍属性和闭包的遗憾

JS闭包总结来源和扩展知识来自于: 1.简书:彻底搞懂JS闭包各种坑2.百度百科  闭包 闭包不是JS独有的特性.但本文以JS闭包来了解闭包的. 1.闭包的本质:是一个函数. 2.闭包的作用:间谍作用,延长变量生命周期. 3.闭包的构成模型:A函数,内部有一个间谍B函数,B函数能访问A函数的私有变量,并返回给A函数外部一些数据.这里的B函数,就叫做闭包. 4应用场景 1.保护函数内的变量安全.以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性. 2.

JavaScript——初理解闭包及作用

js是一个函数级语言,变量的作用域是: 内部可以访问内部,内部可以访问外部,外部不能访问内部. 如果要在外部,访问函数内部的变量,就要用到闭包.闭包就是指访问到了本不该访问的变量. 闭包作用1:实现封装 先来看一个关于封装的例子,在person之外的地方无法访问其内部的变量,而通过提供闭包的形式来访问: 1 var person = function(){ 2 //变量作用域为函数内部,外部无法访问 3 var name = "default"; 4 5 return { 6 getN

闭包及其作用

闭包:有权访问其他函数内部变量的函数,在一个函数内部创建一个函数,就形成了闭包,闭包的参数和变量不会被垃圾回收机制回收.闭包可以避免全局变量的污染. 使用场景: 1.闭包的经典应用:绑定事件 假如页面上有5个div,我们通过for循环来给每个div绑定一个事件,每点击一次输出它的索引值.如果没有使用闭包,在循环内部给每个节点添加事件,发现点击后每次输出的值都是一样的.因为onclick事件时异步触发的,当事件触发的时候for循环早就结束了.此时变量i的值是5,.解决办法就是在闭包的帮助下,把每次

【前端学习笔记】闭包的作用及案例

1.保存函数执行状态: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="father"> <p>保存函数执行状态</p> <p>性能

从闭包案例中学习闭包的作用,会不会由你。

在文章初识js中的闭包中讲解了闭包的一些概念,但是对于初学者来说可能并不是特别的容易理解,我今天用两个案例来解释闭包可能会好理解一些,在讲案例之前,我们需要了解一些闭包的概念.在看这篇文章之前,请先看上面的那篇文章,不然效果不会太好. 闭包的理解: 所谓的闭包就是可以创建一个独立的环境,每个闭包里面的环境都是独立的,互不干扰. 闭包的创建: 一个函数中嵌套另外一个函数,并且将这个函数return出去,然后将这个return出来的函数保存到了一个变量中,那么就创建了一个闭包. 为啥要学闭包之没有使

JS中闭包的作用

1.执行自执行函数.某些函数可能只需要执行一次而且为了不造成全局污染.声明变量需要使用var,否则会默认添加到全局对象的属性上.或者别的函数可能会误用该属性.全局对象过于庞大的话,会影响访问速度.(变量的取值需要从原型链上遍历) (function(value){ console.log(value)})(3); 2.作为缓存.第二次使用对象时候,可以不用新建对象.单例模式的实现等等. var Cache=(function(){ var cache={}; return{ getObj:fun