なぜその呼び出しを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>
DoStuff
の本体内で宣言したため、 のレキシカル スコープ内に存在し、そのすべてのメンバーにアクセスできることMain
を意味します。クロージャは非常に強力ですが、悪用するのは簡単です。この種の機能が本当に必要な場合は、この方法をお勧めしますが、それ以外の場合は KISS (Keep It Simple Sir) をお勧めします。DoStuff
Main