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

时间:2011-09-11 15:34:03

标签: javascript function frameworks private

我正在创建一个javascript框架,下面的代码因某些原因无法运行。有什么理由吗?

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

5 个答案:

答案 0 :(得分:3)

您可以使用call或appy更改范围:

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

因此我们更改this以引用私有函数

答案 1 :(得分:1)

jCamp()的参数的匿名函数内调用的

test()未定义(如果您不更改,那就是第8行的那个)你的代码)。函数 test()仅在 jCamp()的定义中定义。

答案 2 :(得分:0)

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

我会这样做。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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