我正在創建一個javascript框架,下面的代碼由於某種原因不能正常工作。任何理由?函數中傳遞函數作爲參數時調用私有函數?
function jCamp(code){
function test(){
alert();
}
code();
}
jCamp(function(){
test();
});
我正在創建一個javascript框架,下面的代碼由於某種原因不能正常工作。任何理由?函數中傳遞函數作爲參數時調用私有函數?
function jCamp(code){
function test(){
alert();
}
code();
}
jCamp(function(){
test();
});
您可以用電話或APPY改變範圍:
function jCamp(code){
function test(){
alert();
}
code.call(test);
}
jCamp(function(){
this();
});
所以我們改變this
引用私有函數
試驗(+)是匿名函數,參數JCAMP()沒有定義(這是第8行的一個,如果你不改變你的代碼)中調用。功能test()僅在jCamp()的定義內部定義。
那麼無論如何,它使一個函數只能通過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'。 – delnan
功能的範圍時,它是創建,而不是當它被稱爲是確定的。
var a = 1; // This is the a that will be alerted
function foo(arg) {
var a = 2;
arg();
}
foo(function() { alert(a); });
這樣做。謝謝! –