2012-06-05 256 views
-1

這裏是我爲例:傳遞函數作爲參數

function a(b) 
{ 
    b(); 
} 

function b() 
{ 
    alert("d"); 
} 

function c() 
{ 
    alert("e"); 
} 

a(c);//Output e 

隨着小提琴:http://jsfiddle.net/YqeS3/

我怎麼能火從一個真正的B功能?

+0

局部變量特朗普全局變量,使用更好的命名約定。 :) – epascarello

+1

是的,這個問題沒有意義。你在做什麼是陰影變異 - 這往往是難以發現的錯誤。 – ZER0

回答

1

如果乙functi關於是不是全球性的,你不希望使用命名約定,你可以創建一個附加功能

function d() { 
    b(); 
} 

,並稱之爲一個來代替。我仍然認爲你應該簡單地說出你的論點和你的功能,因爲它也會爲其他人(包括你自己的未來版本)看到你的代碼創造更少的困惑。

1

如果所有這些功能都在全球範圍內定義,你可以使用這個:

window.b(); 
+0

好...但如果'b'不是全球性的,我可以做些相當的事情嗎? – user1365010

+0

啊,那你運氣不好。在JavaScript_中查看_shadowing [這裏](http://stackoverflow.com/questions/5373278/variable-shadowing-in-javascript) –

0

您可以通過兩種方法

b(); 

a(b); 
0

。假定你需要調用真正的函數調用它ba,你應該寫:

window.b(); 
0

函數a中的變量b只是一個局部變量,您可以指定任何您喜歡的名稱。在a範圍內調用b將使您無法在函數範圍內調用具有該名稱的外部變量或函數。正如之前這裏由Sirko回答,您可以通過使用的

window.b(); 

之外的功能範圍調用考慮重命名你的範圍變量,如果你有問題。