最后一个例子 one <=>
function (f) { return function (x) { return f(x); } };
所以one()还是一个闭包 one()<=>
function (x) { return f(x); }
这里的f是一个闭包,是由one()括号里传过来的; 所以我们假设f为alert one(alert)<=>
one()
function(x){ return alert(x); }
把这个闭包赋给一个变量:
var first = one(alert);
然后进行最后的调用:
first("text");
这时候会alert出"text"这几个字符,如果不用变量直接写的话就是 one(alert)("text"); 和add函数里面最下面的return m(f)(n(f)(x));其中的n(f)(x)形式一样。 所以如果我们写two(alert)(1)的话也会alert两次,第一次是1,第二次是undifined的(因为最里层的调用并没有返回值),本质上是进行了嵌套调用。最后老师用了这种“创建一个匿名函数立即执行”的形式
one(alert)("text");
return m(f)(n(f)(x));
n(f)(x)
two(alert)(1)
(two( function(){alert(1)} ))()
来执行,这里其实已经没x什么事了... 其实我试了一下two(function(){alert("dd")})()这么写也能正确执行,add这个东西看上去就是一个把闭包不断嵌套的闭包- -
two(function(){alert("dd")})()
Sign in to make a reply
两仪藤乃
最后一个例子 one <=>
所以one()还是一个闭包 one()<=>
这里的f是一个闭包,是由
one()
括号里传过来的; 所以我们假设f为alert one(alert)<=>把这个闭包赋给一个变量:
然后进行最后的调用:
这时候会alert出"text"这几个字符,如果不用变量直接写的话就是
one(alert)("text");
和add函数里面最下面的return m(f)(n(f)(x));
其中的n(f)(x)
形式一样。 所以如果我们写two(alert)(1)
的话也会alert两次,第一次是1,第二次是undifined的(因为最里层的调用并没有返回值),本质上是进行了嵌套调用。最后老师用了这种“创建一个匿名函数立即执行”的形式来执行,这里其实已经没x什么事了... 其实我试了一下
two(function(){alert("dd")})()
这么写也能正确执行,add这个东西看上去就是一个把闭包不断嵌套的闭包- -