我正在创建一个javascript框架,下面的代码因某些原因无法运行。有什么理由吗?
function jCamp(code){
function test(){
alert();
}
code();
}
jCamp(function(){
test();
});
答案 0 :(得分:3)
您可以使用call或appy更改范围:
function jCamp(code){
function test(){
alert();
}
code.call(test);
}
jCamp(function(){
this();
});
因此我们更改this
以引用私有函数
答案 1 :(得分:1)
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); });