我在变量
中使用此函数var MyFunction = (function () {
//......
function FunctionToCall() {
//......
};
//........
}();
我想用变量外部的事件处理程序调用{{1}},如下所示:
FunctionToCall()
有什么想法吗?
答案 0 :(得分:2)
您可能错过了一份退货声明 我想你想要这样的东西:
var myFunction = (function() {
var privateVar = 'Hello';
return function innerFunction() {
return privateVar;
};
})();
console.log(myFunction());
另一种方法是使用您要访问的方法返回一个对象:
var myThing = (function() {
var privateVar = 'Hello';
return {
innerFunction1: function() {
return privateVar;
},
doSomething: function(newString) {
privateVar = newString;
}
};
})();
myThing.doSomething("Hi!");
console.log(myThing.innerFunction1());
之后,您可以附加您可以访问事件处理程序的任何内容。
答案 1 :(得分:0)
您可以声明静态方法。因此,将其称为MyFunction.FunctionToCall()
:
var MyFunction = function() {
};
MyFunction.FunctionToCall = function() {
console.log('MyFunction.FunctionToCall called');
};
$(function() {
$('div').click(function() {
MyFunction.FunctionToCall()
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<div>Click me</div>
答案 2 :(得分:-1)
您正在为代码中的变量MyFunction
声明一个匿名函数。它将是未定义的。您不想在匿名函数内调用任何内容,因为通常会立即调用匿名函数。
相反,将FunctionToCall声明为外部变量,然后您可以在匿名块内部定义它,如下所示
var FunctionToCall;
(function () {
//......
FunctionToCall = function() {
//......
};
//........
}();
然后你可以调用FunctionToCall。虽然我不认为这是一个很好的约定,但通常你希望将整个代码中使用的函数保持在更高的相同范围级别。