javascriptで

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のダイアログを表示するには
どうしたらいいのでしょうか?

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2007/05/17 13:00:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:jack_sonic No.1

回答回数124ベストアンサー獲得回数25

ポイント60pt
  • ①function test_ok(aa,function)となっていますが、

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>
id:hopefully

なるほどですw

ありがとうございます。

2007/05/17 12:59:51
id:susie-t No.2

回答回数99ベストアンサー獲得回数18

ポイント10pt

意図がよくわからない部分がありますが、勝手に想像して直すと

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=として使える。呼び出し側には影響しない。)

ご参考までに。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません