为闭包声明函数两次?

时间:2013-07-27 20:38:43

标签: javascript closures iife

我有这样的事情:

// This executes once when the page loads.
(function() {
    //under some conditions, it calls:
    myfunction();

    function myFunction() {  
        // defines function
    }
}());

function thisIsCalledByAnOnClick() {
    // HERE I need to call myFunction()
}

我不希望从控制台调用myFunction(),因此我将其包含在匿名函数中。所以,如果我需要在其他地方调用它,我会将它声明两次或者我该怎么做?

4 个答案:

答案 0 :(得分:2)

在封闭内thisIsCalledByAnOnClick可以访问myFunction。有关详细信息,请参阅:module pattern

// This executes once when the page loads.
var modul = function() {
    //under some conditions, it calls:
    myfunction();

    function myFunction() {
        // defines function
    }

    return {
        thisIsCalledByAnOnClick : function() {
        // HERE I need to call myFunction()
        }
    };
}();

答案 1 :(得分:1)

  1. 在匿名函数中定义thisIsCalledByAnOnclick()。
  2. 使用addEventListener分配onClick句柄。

答案 2 :(得分:0)

您可以使用构造函数来封装这两个函数。一个是公共职能,另一个是私人。

d

答案 3 :(得分:0)

function() {
     xyz = function() {
           return this;
           };

     xyz.prototype= {

     Myfunction1 : function(param1,param2)  {
     //some code!!!
     },
     Myfunction2 : function(param1,param2) {
     //some code!!!
     }
     };
})();

function thisIsCalledByAnOnClick() {

        instance=new xyz();
        instance.Myfunction1(a,b)
}