Javascript 在函数中作为参数传递函数时调用私有函数?
我正在创建一个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){
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
,因为这是窗口。