WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:javascriptでの関数の入れ子について

0:[投稿] のん [2003/01/06 23:11 ][環境:IE6,winXP ???]

関数を入れ子にしたいのですが、うまく動きません。
mouseoverでidを取得し、そのidを使用して次の関数を実行したいのです。
宜しくお願い致します。

var IdName;
var X = 0;
function GetId() {
 IdName = event.srcElement.id;
 function move() {
            document.getElementById(IdName).style.left = X += 5;
 setTimeout("move()",3);
 }
}

#上記では省略しましたが、実際にはidによって入れ子で実行する関数を場合分けしたいと思っています。


1:[回答] Malic [URL] [2003/01/07 09:19 ]

関数宣言は入れ子にできません。


2:[回答] gun [2003/01/07 09:21 ]

関数の入れ子自体が可能なことかどうか知りませんが、
下記のようにすれば動作すると思います。

var IdName; //<--大域変数でなくて良いようにも思えます
var X = 0;
function GetId() {
    IdName = event.srcElement.id;
    move();
}

function move() {
    document.getElementById(IdName).style.left = X += 5;
    setTimeout("move()",3);
}


3:[回答] ween [2003/01/07 13:52 ]

>>1
古い仕様では関数の入れ子はエラーですが、
JavaScript1.2以降/ECMAScript第3版以降では仕様上問題ありません。
http://developer.netscape.com/docs/manuals/js/core/jsref15/function.html#1225385

>>0
IE5/NN4以降であれば、setTimeout の第一引数として
式を表す文字列の代わりにFunctionオブジェクトを渡すことができます。
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/settimeout.asp
http://developer.netscape.com/docs/manuals/js/client/jsref/window.htm#1203758
 setTimeout(move,3);
で上手くいくと思います。


4:[回答] Malic [2003/01/07 15:11 ]

以下のテスト作成して入れ子のテストしてみたんですが、
testb(内側の方)呼ぶとエラーになるんですけど、何かおかしいんでしょうか?

<html>
<head>
<title>function入れ子</title>
<script language="javascript">
<!--
function testa(){
alert("入れ子外側");
function testb(){
alert("入れ子内側");
}
}

//-->
</script>
<body onLoad="testa()">
入れ子テスト<br>
<a href="javascript:testa();">testa</a><br>
<a href="javascript:testb();">testb</a>
</body>
</html>


5:[回答] ween [2003/01/07 16:22 ]

>>4
内側の関数(testb)が定義されるのはグローバルスコープではありません。
内側の関数は、外側の関数(testa)の仮引数やローカル変数等と同じスコープに定義されます。
ですから、testa 内部であれば testb を呼び出せます。testa 外部からは呼び出せません。
testa 内部で定義した testb を testa 外部から呼び出したいならば、
testa 内部で window.testb=testb; などとして
予め testb を外部から参照できるようにしておく必要があります。


6:[回答] Malic [URL] [2003/01/07 17:42 ]

スコープの問題ですか、前にも少し違う事でですが教えて頂いたような(別の方かもしれませんけど、この掲示板でした。)・・・
進歩してない自分に反省・・。


7:[完了] のん [2003/01/07 18:49 ]

>>Malicさん、gunさん、weenさん
ありがとうございました。
動かすことができました。ほんとに助かりました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World