function test(aa,bb){
var aa = "hoge"
var bb = "hoge"
test_ok(aa,eval(aa+"_"+bb+"()"))
}
function hoge_hoge(){
alert("hogehoge")
}
function test_ok(aa,function){
hoge_hoge()
alert("ok")
}
みたいなように記述しているように
hogehogeのダイアログを表示してから
okのダイアログを表示するには
どうしたらいいのでしょうか?
functionという識別子は、関数を定義するためのJavaScriptの予約語であり、
変数名、引数名などに使ってはいけない語ですので、
()内の識別子は違う名前でなければ正常に動作しません。
その他ポイントは//コメントのところに書きました。
ソース
<html> <head> </head> <body> <script type="text/javascript"> <!-- // ①function test_ok(aa,function)となっていますが、 // functionという識別子は、関数を定義するためのJavaScriptの予約語であり、 // 変数名、引数名などに使ってはいけない語ですので、 // ()内の識別子は違う名前でなければ正常に動作しません。 // ②なるべく実行文の末尾には;をつけてください //質問文のソースでは、 // test_ok()を呼び出すときにevalによって hoge_hoge()が実行され、 // test_ok()の中にさらにhoge_hoge();の呼び出しが入っているので、 // hoge_hogeダイアログはokダイアログの前に2回実行されます。 function test(aa,bb) { var aa = "hoge"; var bb = "hoge"; test_ok(aa, eval( aa+"_"+bb+"();")); } function hoge_hoge() { alert("hogehoge"); } function test_ok(aa,func) { hoge_hoge(); alert("ok"); } test(); //--> </script> </body> </html>
意図がよくわからない部分がありますが、勝手に想像して直すと
function test(aa, bb){ test_ok(aa+"_"+bb+"();"); } function hoge_hoge(){ alert("hogehoge"); } function test_ok(func){ eval(func); alert("ok"); } test("hoge, "hoge");
でしょうか。
"function"は予約語なので変数としては使えません。(9行目の第二引数)
また、提示されたコードのtest_ok(aa,eval(aa+"_"+bb+"()"))の第二引数は、evalの結果が設定されますが、ここではhoge_hoge()の返却値でundefinedです。(hoge_hogeが何かreturnすればそれが設定される)
evalの時点でhoge_hoge()が実行されるので、提示されたコードではhoge_hoge()が2回実行されることになります。
あとは引数等を変更しました。引数にaaとある場合、関数内でvar aa;とするのは二重定義でよくないと思います。(そのままaa=として使える。呼び出し側には影響しない。)
ご参考までに。
なるほどですw
ありがとうございます。