闭包

javascript闭包

余生颓废 提交于 2019-12-19 06:34:38
官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点: 1.作为一个函数变量的一个引用,当函数返回时,其处于激活状态。 2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区。 简单的说,javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。 function closure(){ var str = " I'm a part variable. " ; return function (){ alert(str); } } var fObj = closure(); fObj();    在上面代码中, str 是定义在函数 closure 中局部变量,若 str 在 closure 函数调用完成以后不能再被访问,则在函数执行完成后 str 将被释放。但是由于函数 closure 返回了一个内部函数,且这个返回的函数引用了 str 变量,导致了 str 可能会在 closure 函数执行完成以后还会被引用,所以 str 所占用的资源不会被回收。这样 closure 就形成了一个闭包。 事实上

Javascript--闭包(closure)

China☆狼群 提交于 2019-12-19 06:34:17
第一篇文章 在网上搜了好久这方面的知识,才找到一些资料,通过阅读发现,闭包确实很重要。 定义:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 先给出一个简单的例子: function a() { var i = 0; function b() { alert(++i); } return b; } var c = a(); c(); 函数a(): 里面定义了一个b函数,而函数a()的返回值是b函数。 调用关系:定义一个c变量直接调用a函数,而a函数返回的是b函数,所以此时相当于:var c = a.b(); 然后再调用c(), 就相当于调用a.b(); 此时会alert什么呢? 答案是1。 解析:在javascript里面如果一个变量没有别调用的时候会被垃圾回收器回收掉,而这里函数a()里面的i是一个局部变量,所以在执行完var c = a();之后应该会被回收掉,但是这里却没有,这就是因为在a()函数里面的b()函数又调用了这个i,这里就产生了闭包的效果。 再看一个例子 for (var i = 1; i < 4; i++) { var id = document.getElementById("a" + i); id.onclick = function() { alert(i); } }

javascript闭包

谁说我不能喝 提交于 2019-12-19 06:33:54
所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 上面是官方的解释,但这解释只会让人头晕。要理解闭包,首先理解两点:变量的作用域以及作用域链,这两个在前面都已经介绍过了,并且举了简单了列子,来回顾一下: var color = "blue"; function changeColor(){ var anotherColor = "red"; function swapColors(){ var tempColor = anotherColor; anotherColor = color; color = tempColor; //在 swapColors函数里面可以访问tempColor,anotherColor和color } //在这里可以访问anotherColor和color,但不能访问tempColor swapColors(); } 上面的代码,我们之前用来说明作用域链,也就是变量从里往外找变量,这一简单的概念。但是,现在反过来,如果,我们需要在一个外部执行环境里面,访问内部执行环境的变量怎么办呢? function f1(){ var n=999; function f2(){ alert(n); // 999 } //f2(); } 上面的代码很简单,我们在f1里面去调用f2(

javascript闭包(Closure)初探

走远了吗. 提交于 2019-12-19 06:33:39
本文转自:http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/17/1458405.html javascript闭包(Closure)初探 closure被翻译成“闭包”,感觉这东西被包装的太学术化。下面参考书本和网上资源简单探讨一下(理解不当之处务请留意)。 1、什么是 闭包 官方的回答:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 看了上面的定义,如果你不是高手,我坚信你会和我一样愤怒的质问:这tmd是人话吗? 要理解闭包,还是代码最有说服力啊,上代码: function funcTest() { var tmpNum=100; //私有变量 //在函数funcTest内定义另外的函数作为funcTest的方法函数 function innerFuncTest( { alert(tmpNum); //引用外层函数funcTest的临时变量tmpNum } return innerFuncTest; //返回内部函数 } //调用函数 var myFuncTest=funcTest(); myFuncTest();//弹出100 上面代码中,注释已经写的清清楚楚。现在我们可以这么理解“闭包”:在函数体内定义另外的函数作为目标对象的方法函数

JS中的闭包(closure)

感情迁移 提交于 2019-12-19 06:33:18
JS中的闭包(closure) 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一.什么是闭包 JS中,在函数内部可以读取函数外部的变量 function outer(){ var localVal = 30; return localVal; } outer();//30 但,在函数外部自然无法读取函数内的局部变量 function outer(){ var localVal = 30; } alert(localVal);//error 这里有个需要注意的地方,函数内部声明变量的时候,一定要使用var命令。如果不用的话,实际上是声明了一个全局变量。 function outer(){ localVal = 30; return localVal; } outer(); alert(localVal);//30 以上的表述,是JS变量的作用域的知识,它包括全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 function outer(){ var localVal = 30; function inner(){ alert(localVal); } return inner; } var func =

js闭包详解

此生再无相见时 提交于 2019-12-19 06:32:49
闭包 ( closure )是 Javascript 语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 闭包的定义及其优缺点 闭包 是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量 闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。 闭包是 javascript 语言的一大特点,主要应用闭包场合主要是为了:设计私有的方法和变量。 一般函数执行完毕后,局部活动对象就被销毁,内存中仅仅保存全局作用域。但闭包的情况不同! 嵌套函数的闭包 function aaa() { var a = 1; return function(){ alert(a++) }; } var fun = aaa(); fun();// 1 执行后 a++,,然后a还在~ fun();// 2 fun = null;//a被回收!! 闭包 会使变量始终保存在内存中,如果不当使用会增大内存消耗。 javascript 的垃圾回收原理 (1)、在 javascript 中,如果一个对象不再被引用,那么这个对象就会被 GC 回收; (2)、如果两个对象互相引用,而不再被第 3

详解js闭包

人盡茶涼 提交于 2019-12-19 06:32:33
转自:http://segmentfault.com/a/1190000000652891 闭包 ( closure )是 Javascript 语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 闭包的定义及其优缺点 闭包 是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量 闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。 闭包是 javascript 语言的一大特点,主要应用闭包场合主要是为了:设计私有的方法和变量。 一般函数执行完毕后,局部活动对象就被销毁,内存中仅仅保存全局作用域。但闭包的情况不同! 嵌套函数的闭包 function aaa() { var a = 1; return function(){ alert(a++) }; } var fun = aaa(); fun();// 1 执行后 a++,,然后a还在~ fun();// 2 fun = null;//a被回收!! 闭包 会使变量始终保存在内存中,如果不当使用会增大内存消耗。 javascript 的垃圾回收原理 (1)、在 javascript 中

JavaScript之闭包

て烟熏妆下的殇ゞ 提交于 2019-12-19 06:31:11
不少开发人员总是搞不清匿名函数和闭包这两个概念,因此经常混用。闭包是指有权访问另一个 函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数 --《JavaScript高级程序设计》 来源: https://www.cnblogs.com/songsongblue/p/10899046.html

对闭包的理解?

时光怂恿深爱的人放手 提交于 2019-12-19 06:30:50
(1) 、使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄漏 (2) 、闭包有三个特性:   a、函数嵌套函数   b、函数内部可以引用外部的参数和变量   c、参数和变量不会被垃圾回收机制回收 来源: https://www.cnblogs.com/sunyang-001/p/10792729.html

js闭包

前提是你 提交于 2019-12-19 06:30:30
1、什么是js闭包?   闭包的英文单词是closure,是指有权访问另一个函数作用域中变量的函数。   在本质上,闭包就是将函数内部和函数外部链接起来的一座桥梁。内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕。   这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少代码量,是代码看上去更加清晰等,功能十分强大。 2、闭包的优缺点?   优点:可以把局部变量驻留在内存中,可以避免使用全局变量。   缺点:也有占用更多内存的缺点,用完要及时让垃圾回收器回收,否则会占用更多内存。   闭包两种访问方式会有不同的结果,()()双括号访问方式会出错,先复制后的但括号方式是对的。 3、闭包相关知识点   常见的方式是在函数创建另一个函数   闭包的第一个用途:通过闭包可以访问局部变量   闭包的第二个用途:可以让局部变量的值始终保持在内存中     优点:可以把局部变量驻留在内存中,可以避免使用全局变量;全局变量在复杂程序中会造成许多麻烦(比如命名冲突、垃圾回收等),所以推荐使用私有的,封装的局部变量,而闭包可以实现这一点。     缺点:由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能占用更多的内存,所以过度使用闭包会导致性能下降 来源: https://www.cnblogs.com/liutianchuan/p/10732028