闭包小例

//A是一个普通的函数  
function A(a)  
{   
    return a;  

//B是一个带函数返回值的函数  
function B(b)  
{   
    return function (c)
    {    
        return b+c; 
    }  
}  

var x = A(10);  

var y = B(20);   

var z = B(30);   

alert(x);      //得到10  
alert(y(50));  //得到70  
alert(z(100)); //得到130
[2008/12/16 12:01:20] 李伝涛 说: Code
var a=[-1,-2,-3,5,6,-1];
function f(s,e)
{
    var ret=[];
    for(var i in s)
    {
        ret.push(e(s[i]));
    }
    return ret;
}
var b=f(a,function(n){return n>0?n:0});
alert(b);

//result:
//0,0,0,5,6,0
[2008/12/16 12:01:45] 李伝涛 说: //这是一个计算x+y的函数,但是它和常规函数的不同之处在于 
//它是被Currying的 
function add(x, y) 
{  
    //当x,y都有值得时候,计算并返回x+y的值  
    if(x!=null && y!=null) return x + y;  
    //否则,若x有值y没有值 
    else if(x!=null && y==null) return function(y) 
    {  
        //返回一个等待y参数进行后续计算的闭包  
        return x + y; 
    } 
    //若x没有值y有值 
    else if(x==null && y!=null) return function(x) 
    {  
        //返回一个等待x参数进行后续计算的闭包     
        return x + y; 
    } 

//计算add(3,4)的值,得到3+4的结果7 
var a = add(3, 4); 
//计算add(2)的值,得到一个相当于求2+y的函数 
var b = add(2); 
//继续传入y的值10,得到2+10的结果12 
var c = b(10);
[2008/12/16 12:02:06] 李伝涛 说: function makefunc(x)
{
    return function(){return x;}
}
var a = [makefunc(0),makefunc(1),makefunc(2)];
alert(a[0]());
//result 0
alert(typeof(a[0]));
//result function
alert(a[0]);
//result function(){return x;}

 

var y = "global";
function constructFunction() {
    var y = "local";
    return new Function("return y");  // Does not capture the local scope!
}
// This line displays "global" because the function returned by the
// Function() constructor does not use the local scope. Had a function
// literal been used instead, this line would have displayed "local".
alert(constructFunction()());  // Displays "global"
[2008/12/16 12:02:41] 李伝涛 说: 科里化:
//这是一个计算x+y的函数,但是它和常规函数的不同之处在于 
//它是被Currying的 
function add(x, y) 
{  
    //当x,y都有值得时候,计算并返回x+y的值  
    if(x!=null && y!=null) return x + y;  
    //否则,若x有值y没有值 
    else if(x!=null && y==null) return function(y) 
    {  
        //返回一个等待y参数进行后续计算的闭包  
        return x + y; 
    } 
    //若x没有值y有值 
    else if(x==null && y!=null) return function(x) 
    {  
        //返回一个等待x参数进行后续计算的闭包     
        return x + y; 
    } 

//计算add(3,4)的值,得到3+4的结果7 
var a = add(3, 4); 
//计算add(2)的值,得到一个相当于求2+y的函数 
var b = add(2); 
//继续传入y的值10,得到2+10的结果12 
var c = b(10);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值