function mainFunc(){
function f1(){
alert("f1");
}
function f2(){
alert("f2");
}
}
function myFun(){
var data = f1();
}
是否有可能在javascript中从闭包外部调用f1()函数。
答案 0 :(得分:2)
如果使用mainFunc
创建对象,则可以访问其中的方法。
function mainFunc(){
this.f1 = function (){
alert("f1");
}
this.f2 = function(){
alert("f2");
}
}
function myFun(){
var mainObj = new mainFunc();
var data = mainObj.f1();
}
myFun();
答案 1 :(得分:0)
尝试返回一个仍然可以访问mainFunc
闭包中定义的函数的对象!
有点乱,但希望它有所帮助:
function mainFunc(){
function f1(){
alert("f1");
}
function f2(){
alert("f2");
}
return {
f1 : f1,
f2 : f2
};
}
function myFun(){
var data = mainFunc().f1();
}
闭包背后的想法是保护,同时提供对闭包范围内的值的访问。
如果您还没有,请查看以前的主题。
我很喜欢这个史诗般的答案:
How do JavaScript closures work?
答案 2 :(得分:0)
试试这个。
var mainFunc = new mainFunc();
function mainFunc(){
this.f1 = f1;
this.f2 = f2;
function f1(){
alert("f1");
}
function f2(){
alert("f2");
}
}
function myFun(){
var data = mainFunc.f1();
}
答案 3 :(得分:0)
你基本上必须将该功能传递出去或以某种方式使其可访问
有很多方法可以做到这一点。
以下是使用回调函数的示例。所以将函数作为参数传递给mainFunc
。您传入的函数本身期望将两个函数f1
anf f2
传递给它。
function mainFunc(cb){
var f1 = function(){
console.log("f1");
}
var f2 = function(){
console.log("f2");
}
cb(f1, f2);
}
//this example uses an anonymous function as a callback
mainFunc(function(fnA, fnB){
fnA();
fnB();
})
//this example uses your named function myFun as a callback
function myFun(fnA, fnB){
fnA();
fnB();
}
mainFunc(myFun);
答案 4 :(得分:0)
尝试使用Function.prototype.toString()
,Function
function mainFunc(){
function f1(){
alert("f1");
}
function f2(){
alert("f2");
}
}
function myFun(){
var f1 = "";
var res = mainFunc.toString().split("\n");
for (var i = 0; i < res.length; i++) {
if (res[i].indexOf("f1") !== -1) {
f1 += res[i].trim();
}
if (res[i].indexOf("}") !== -1
&& res[i -1].indexOf("f1") !== -1) {
f1 += res[i].trim();
}
};
f1 = new Function("(" + f1 + "())");
f1();
}
myFun();
&#13;