人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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



●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:AA BB hoge JavaScript test
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● じゃっくそにっく
●60ポイント

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>
◎質問者からの返答

なるほどですw

ありがとうございます。


2 ● susie-t
●10ポイント

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

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

ご参考までに。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ