【问题标题】:Declare function twice for closure?两次声明函数以关闭?
【发布时间】:2013-07-27 20:38:43
【问题描述】:
我有这样的东西:
// 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(),所以我将它包含在匿名函数中。那么,如果我需要在其他地方调用它,我应该声明两次还是我该怎么办?
【问题讨论】:
标签:
javascript
closures
iife
【解决方案1】:
在闭包内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()
}
};
}();
【解决方案2】:
- 在匿名函数中定义 thisIsCalledByAnOnclick()。
- 使用 addEventListener 分配 onClick 句柄。
【解决方案3】:
您可以使用构造函数来封装这两个函数。一个作为公共函数,另一个作为私有函数。
D.
【解决方案4】:
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)
}