@blog.justoneplanet.info

日々勉強

IEにおけるJavaScriptの挙動差

■サンプル

クリックするとIE7、IE6、Operaでは「5」、Firefox、Safari3、NS7.1では「7」と表示されます

■サンプルソース(自由にご利用下さい)

functionをfunctionの中に書くことは可能だ。しかし、function文はカレントスコープの先頭まで巻き取りが行われる。さらに、JavaScriptにはブロックスコープが存在しないので以下のスクリプトは同名の関数を2回宣言したことになる。

<head>
<script type="text/javascript">
window.onload = function(){
    document.getElementById('2007101901button').onclick = function(){
        var bool = true;
        var num = 6;
        if(bool){
            function func(num){
                num++;
                return num;
            }
            num = func(num);
        }
        else{
            function func(num){
                num--;
                return num;
            }
            num = func(num);
        }
        document.getElementById('2007101901num').value = num;
    }
}
</script>
</head>
<body>
<form>
<input type="button" value="click" id="2007101901button" />
<input type="text" size="2" id="2007101901num" />
</form>
</body>

■実行結果

  • Firefoxでは7と表示される
  • IE7では5と表示される

■対処法

以下のように関数リテラル(式)を使用する。

var func = function(num){
    num--;
    return num;
}

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

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment