Javascript 在函数中作为参数传递函数时调用私有函数?

Javascript 在函数中作为参数传递函数时调用私有函数?,javascript,function,frameworks,private,Javascript,Function,Frameworks,Private,我正在创建一个javascript框架,下面的代码由于某种原因无法工作。有什么原因吗 function jCamp(code){ function test(){ alert(); } code(); } jCamp(function(){ test(); }); test()未定义在匿名函数中调用的,该匿名函数是jCamp()的参数(如果您不更改代码,则在第8行)。函数test()仅在jCamp()的定义中定义 function jCamp(code){

我正在创建一个javascript框架,下面的代码由于某种原因无法工作。有什么原因吗

function jCamp(code){
   function test(){
      alert();
   }
  code();
}
jCamp(function(){
  test();
});

test()未定义在匿名函数中调用的,该匿名函数是jCamp()的参数(如果您不更改代码,则在第8行)。函数test()仅在jCamp()的定义中定义

function jCamp(code){
   function test(){
      alert();
   }
  code.call(test);
}
jCamp(function(){
  this();
});
因此,我们将
这个
更改为引用私有函数

function jCamp(code){
   this.test = function(){
      alert("test");
   }
  code();
}
jCamp(function(){
  this.test();
});

我会这样做。

test
是一个私有函数,只能在
jCamp
中使用。不能从作为参数传递的匿名函数调用它。但您可以将其设置为属性,如下所示:

function jCamp(code){
   this.test = function(){
      alert();
   }
  code();
}
jCamp(function(){
  this.test();
});

函数的范围是在创建时确定的,而不是在调用时确定的

var a = 1; // This is the a that will be alerted
function foo(arg) {
        var a = 2;
        arg();
}
foo(function () { alert(a); });

那么,是否还有其他方法可以使函数只能通过jCamp()的参数函数调用?请注意,这实际上会全局存储
test
,因为
这是
窗口