Discuss / JavaScript / 最后一个例子的一点微小的理解

最后一个例子的一点微小的理解

Topic source

两仪藤乃

#1 Created at ... [Delete] [Delete and Lock User]

最后一个例子 one <=>

function (f) {
    return function (x) {
        return f(x);
    }
};

所以one()还是一个闭包 one()<=>

function (x) {
        return f(x);
    }

这里的f是一个闭包,是由one()括号里传过来的; 所以我们假设f为alert one(alert)<=>

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的(因为最里层的调用并没有返回值),本质上是进行了嵌套调用。最后老师用了这种“创建一个匿名函数立即执行”的形式

(two( 
    function(){alert(1)} 
    ))()

来执行,这里其实已经没x什么事了... 其实我试了一下two(function(){alert("dd")})()这么写也能正确执行,add这个东西看上去就是一个把闭包不断嵌套的闭包- -


  • 1

Reply