每日一题1025之JavaScript闭包

function fun(n,o){
	console.log(o);
	return{
		fun:function(m){
			return fun(m,n);
		}
	}
}

var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);




// function fun(n,o){
// 	console.log(o);
// 	return{
// 		fun1:function(m){
// 			return fun(m,n);
// 		}
// 	}
// }

// var a = fun(0);
// a.fun1(1);
// a.fun1(2);
// a.fun1(3);
// var b = fun(0).fun1(1).fun1(2).fun1(3);
// var c = fun(0).fun1(1);
// c.fun1(2);
// c.fun1(3);
// var a = fun(0);执行结果:a是个方法fun1,不执行fun1内的方法体。  此时n=0,o=undefined 然后fun1(1), 打印o=undefined
//  执行a.fun1(1)  会具体执行fun1()的方法体。  此时n=0,o=undefined fun(1,0)   打印o=0
//  执行a.fun1(2)  会具体执行fun1()的方法体。  此时n=0,o=undefined fun(2,0)   打印o=0
//  执行a.fun1(3)  会具体执行fun1()的方法体。  此时n=0,o=undefined fun(3,0)   打印o=0

// var c = fun(0).fun1(1)
//  执行fun(0).fun1(1)   
//  		首先执行fun(0)返回方法fun1,在执行.fun1(1)   会执行方法体 fun(1,0)    打印o=0
//  		此时才将结果赋给c     此时n=1,o=0
//  		然后执行    c.fun1(2);     执行fun(0).fun1(1)结束时,n=1,所以执行fun(2,1)  打印o=1
//  		在执行    c.fun1(3);     此时n的值还是执行完fun(0).fun1(1)结束时的值,n=1,所以执行fun(3,1)  打印o=1

//  再说b 
//  		先执行fun(0),  结果还是返回方法体,返回的方法体执行fun1(1),再拿执行fun1(1)的结果执行fun1(2),
//  		最后那fun1(2)的结果执行fun1(3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值