对这个javascript闭包模式感到困惑

时间:2014-09-17 11:21:55

标签: javascript closures

h = function(){
    x = function(){
        alert("try");
    }();
    x;
};

我对这种行为感到困惑:内部函数立即被调用,没关系。但为什么我必须有一个任务?为什么我不能匿名写?

2 个答案:

答案 0 :(得分:1)

我添加了一个var并将内部执行移到了一行

h = function(){
    var x = function(){
        alert("try");
    };
    x();
};

然后你可以调用h

h();

或者您可以使用

直接调用它
h = function(){
    var x = function(){
        alert("try");
    };
    x();
}();

或者您可以使用

将其扭曲为模块模式
h = function(){
    var x = function(){
        alert("try");
    };
    return {
        x:x
    };
};

h().x();

希望有所帮助

答案 1 :(得分:0)

您可以匿名撰写,当然:

(function(){
    (function(){
        alert("try");
    })();
}) ();

事实上,你的例子不起作用,因为你忘了在最后一行调用它:

} ();

See JSFiddle