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

闭包的定义:

    闭包是个函数,而它「记住了周围发生了什么」。表现为由「一个函数」体中定义了「另个函数」。
我们知道,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);
当闭包函数需要传参数时,需要调用外部函数,返回给一个变量,这个变量就变成一个函数,然后执行这个函数。

***********************************************************************************************************************************

例2

function 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 i
    for (var j = 0; j < fnlist.length; j++) {
        fnlist[j]();//无法运行,哪个大侠说说原因?
    }
}
   






























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值