你爲什麼要轉變的是調用DoStuff
函數?
是不是Main
對事件和「做東西」作出反應?
如果是那樣的話,你應該保持該功能在Main
,像這樣:
function Main(index){
switch (index){
case 1:
DoStuff();
break;
case 2:
DoStuff2();
break;
default:
DoStuff(); //Because, why not?
{
}
function DoStuff(){
document.write("Hello, world!");
}
function DoStuff2() {//something else happens here}
您沒有使用Main
作爲對象,因此沒有必要的持久性(據我知道)。只要切斷不必要的電話,你的生活就會變得更簡單。然而,如果你想要實現這種功能,你可以創建一個簡單的閉包。它應該是這樣的:
<input type="button" onclick="Main(1);" value="Do Something" />
<script type="text/javascript">
function Main(index) {
//This function only exists within the scope of Main
function DoStuff() {
//But now it has the added benefit of knowing about index
switch (index) {
case 1:
alert("Hello, world!");
break;
case 2:
alert("Not, really. I'm mad.");
break;
default:
alert("Hello, world!");
}
}
//Now Main is going to call it's internal function and...
DoStuff();
}
</script>
既然你的Main
身體這意味着DoStuff
存在的Main
詞法範圍之內,將有機會獲得所有成員中聲明DoStuff
。關閉功能非常強大,但很容易濫用它們。如果你真的需要這種功能,我會建議走這條路,否則,KISS(Keep It Simple Sir)。
你在找什麼叫做[dynamic scoping](http://en.wikipedia.org/wiki/Scope_(computer_science)#Dynamic_scoping)。有些語言具有此功能,但不支持JavaScript。 – georg
您可以使用簡單的閉包來實現此功能。請參閱下面的答案。 – elucid8