您的位置:首页 > Web前端 > JavaScript

javascript中的闭包使用例子与解释

2014-04-10 13:09 399 查看
闭包的定义:
闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」。
我们知道,js中函数可以当作参数传递,自然也是可以被return返回的,如果一个函数内部定义的函数,使用了外部函数定义的局部变量,那么当
外部函数返回时,其定义的局部变量空间不会释放,这跟C++是不一样的。
function outer () {
var a=8;
function inner () {
var b=9;
}
}
在这里inner函数可以访问outer函数定义的a变量,但是反过来不可以。还要注意的一点是,如果是想定义函数内部的局部变量,必须用var声明,否则声明的是个全局变量。
**********************************************************************************************************************************
例1
function newClosure(someNum,someRef){var  num=someNum;var anyArray=[1,2,3];var ref=someRef;//console.log(‘hello world’);return function(x){num+=x;anyArray.push(num);console.log('num:'+num+'\nanArray:'+anyArray.toString()+'\nref.someVar:'+ref.someVar);}}var closure1=newClosure(40,{someVar:'closure 1'});//如果不注释掉console.log(‘hello world’)将会输出hello world.var closure2=newClosure(1000,{someVar:'closuere 2'});closure1(5);closure2(-10);当闭包函数需要传参数时,需要调用外部函数,返回给一个变量,这个变量就变成一个函数,然后执行这个函数。***********************************************************************************************************************************例2function sayAlice() {    var sayAlert = function() { console.log(alice); }        var alice = 'Hello Alice';    return sayAlert;}var helloAlice=sayAlice();helloAlice();这个例子说明,闭包函数定义在外围函数的局部变量前,也能使用局部变量。***************************************************************************************************************例子3(我想让一个数组里的每个元素是个函数,然后执行的,但是不知道为啥)function buildList(list) {//传入个类似数组之类的线性表var result=[];for (var i = 0; i < list.length; i++) {result.push(function(){        //将一个函数放入到一个数组中console.log(list[i]);});};return result;//返回这个数组,每一个元素都是一个函数,好神奇的JS}function testList() {var fnlist = buildList([1,2,3]);// using j only to help prevent confusion - could use ifor (var j = 0; j < fnlist.length; j++) {fnlist[j]();//无法运行,哪个大侠说说原因?}}
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: