//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);