Вызывать приватную функцию при передаче функции в качестве аргумента функции? - PullRequest
2 голосов
/ 11 сентября 2011

Я создаю фреймворк javascript, и приведенный ниже код по какой-то причине не работает.Любая причина почему?

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

Ответы [ 5 ]

3 голосов
/ 11 сентября 2011

Вы можете изменить область с помощью вызова или приложения:

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

Таким образом, мы изменили this для ссылки на приватную функцию

1 голос
/ 11 сентября 2011

test () , который вызывается внутри анонимной функции, которая является аргументом для jCamp () не определено (это тот, что в строке 8, если вы не измените свой код).Функция test () определяется только внутри определения jCamp () .

0 голосов
/ 11 сентября 2011

Область действия функции определяется, когда она создана , а не когда она вызывается.

var a = 1; // This is the a that will be alerted
function foo(arg) {
        var a = 2;
        arg();
}
foo(function () { alert(a); });
0 голосов
/ 11 сентября 2011

test является частной функцией, которую можно использовать только в jCamp.Вы не можете вызвать его из анонимной функции, переданной в качестве аргумента.Вы можете сделать это свойство, например, так:

function jCamp(code){
   this.test = function(){
      alert();
   }
  code();
}
jCamp(function(){
  this.test();
});
0 голосов
/ 11 сентября 2011
function jCamp(code){
   this.test = function(){
      alert("test");
   }
  code();
}
jCamp(function(){
  this.test();
});

Я бы сделал это так.

...