闭包的概念及使用

什么是闭包?

官方来说就是引用了自由变量的函数;通俗讲就是里面函数引用了外面的变量,同时这个函数一定被外面变量所引用。也就是说被引用的自由变量将和函数一同存在,即使离开了创造他的环境也会存在。很多高级应用中都要依靠闭包来实现。

例如:

  var eat = function(){

var food = ‘包子‘;

//这里的return所返回的函数就是典型的闭包写法

return function(){

console.log(food);

}

}

var look = eat();

上面例子的定义的变量food就被return function里面所引用,而这个函数也必将要被他外部的变量所引用,这样的条件才能形成闭包;

那我们说平时还有哪些形成闭包的例子呢?如setInterval();setTimeOut();事件等

使用闭包的好处就在于可以让我们局部变量持续保存下来;但不能滥用,用的不当就会导致内存浪费。

如果我们想避免闭包给我们带来的影响,可以通过立即执行函数来传参,打断这个闭包环境,如:

  (function(index){

lis[index].onclick = function(){

console.log(index);

}

})(i)

时间: 2024-08-26 07:07:01

闭包的概念及使用的相关文章

闭包的概念和实例

闭包的概念 什么是闭包呢? 闭包(Closure),是引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外.所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体. 其实js中,每个函数就是一个闭包.函数和自己的内部定义的变量绑定在一块,组合成的实体就是闭包.只不过在特殊的情况下,即使函数执行完成了,由于某些原因导致函数内部的变量仍然被外界所引用,所以垃圾回收并不释放函数相关的所有内容,而且将函数和必要的变量组成一个闭包的实体,不释放,

由 JavaScript 看闭包的概念

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

作用域、原型链、闭包等概念理解

1.执行环境及作用域 (1).执行环境: 定义了变量或函数有权访问的其它数据,决定了它们的各自行为.每个执行环境都有一个与之关联的变量对象(variable object, VO),执行环境中定义的所有变量和函数都会保存在这个对象中,解析器在处理数据的时候就会访问这个内部对象. 全局执行环境是最外层的一个执行环境,在web浏览器中全局执行环境是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的.每个函数都有自己的执行环境,当执行流进入一个函数的时候,函数的环境会被

深入理解Lua的闭包:概念和应用

本文首先通过具体的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理. 闭包的概念 在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会访问的非局部变量,那么它就是通常说的函数.也就是说,在Lua中,函数是闭包一种特殊情况.另外在Lua

JavaScript闭包的概念及用法

1.闭包的概念: 闭包就是能够读取其他函数内部变量的函数. 例如: function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 其中f2函数就是闭包. 由于在Javascript语言中,只有函数内部的子函数才能读取局部变量, 因此可以把闭包简单理解成"定义在一个函数内部的函数". 所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁.2.

python函数中闭包的概念说明

函数中闭包的概念说明 闭包: 内层函数对外层函数非全局变量的引用,就叫做闭包 判断闭包方法 ._closure_ : 执行后返回有效信息就是闭包,返回none就不是闭包 举例1: 是闭包 def wrapper(): name = 'alex' def inner(): print(name) inner() print(inner.__closure__) #(<cell at 0x006121D0: str object at 0x00227380>,) wrapper() 结果: ale

Javascript 中闭包的概念

一直再说闭包闭包,其实自己一直不懂闭包是个什么意思,今天,上百度找了找闭包的相关资料,参考整理了下,希望以后能用得着: 闭包其实是javascript语言中的一个难点,也是该语言的一个特色,据说很多高级应用都需要闭包的支持: 先理解下下面的几个概念: 1.变量的作用域 javascript中声明变量使用var 关键字,稍微了解的同学都知道,加了var关键字声明的变量是局部变量,反之则为局部变量 例如: var text = 'hello';   局部变量 text = 'world'; 全局变量

JS闭包的概念

原文地址:http://zhidao.baidu.com/link?url=f81iaijX6nzY99Wz43v-p_qZEn4cCaomT4LD6NH5jVtI0yK2V76VJWefih51vAiQbPzkhCz_3ry8Y-FAQA0-jK 先从闭包特点解释,应该更好理解. 闭包的两个特点: 1.作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态.2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区. 其实上面两点可以合成一点,就是闭包函数返回时,该函数内部变量处于激活状态

闭包的概念及作用(转自网络)

一.什么是闭包?“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.我想用如何在Javascript中创建一个闭包来告诉你什么是闭包,因为跳过闭包的创建过程直接理解闭包的定义是非常困难的.看下面这段代码: function a(){ var i=0; function b(){ alert(++i); } return b;}var c = a();c();这段

作用域、闭包等概念的理解

总结一下我对JS中这些基本却略纠结的概念的理解. 作用域 我们知道,JS不支持块级作用域,只支持函数作用域.函数体内,既不是局部变量,也不是参数的变量称为自由变量.如果没搞清楚函数的作用域,有时某些自由变量的值会与你所想的很不一样.举个简单例子 1 var a = 10; 2 3 function getA() { 4 alert(a); 5 } 6 7 (function() { 8 var a = 20; 9 getA(); //10 10 })(); 11 12 (function(fn)