【发布时间】:2011-11-14 19:25:51
【问题描述】:
我正在创建一个 javascript 框架,但下面的代码由于某种原因无法正常工作。有什么原因吗?
function jCamp(code){
function test(){
alert();
}
code();
}
jCamp(function(){
test();
});
【问题讨论】:
标签: javascript function frameworks private
我正在创建一个 javascript 框架,但下面的代码由于某种原因无法正常工作。有什么原因吗?
function jCamp(code){
function test(){
alert();
}
code();
}
jCamp(function(){
test();
});
【问题讨论】:
标签: javascript function frameworks private
您可以通过 call 或 appy 更改范围:
function jCamp(code){
function test(){
alert();
}
code.call(test);
}
jCamp(function(){
this();
});
所以我们把this改成引用私有函数
【讨论】:
test() 未定义(如果您不更改,那就是第 8 行的那个你的代码)。 test() 函数只定义在 jCamp() 的定义中。
【讨论】:
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();
});
【讨论】:
test,因为this 是window。
函数的范围是在创建时确定的,而不是在调用时确定的。
var a = 1; // This is the a that will be alerted
function foo(arg) {
var a = 2;
arg();
}
foo(function () { alert(a); });
【讨论】: