1

配列の末尾に値をプッシュしたいのですが、何らかの理由で機能しません。ボタンをクリックすると、値が配列の最後に追加されます。次に、もう一度クリックすると、まだそこにあることがわかりますが、代わりにアレイにプッシュインし続けます。配列にとどまる値を取得するにはどうすればよいですか。

    <html>
    <head>
        <script>
            function myFunction() {
                var asdf = ["a","b","c","e"];
                if (asdf.indexOf("d")==-1) {
                    asdf.push("d");
                    alert(asdf.indexOf("d")+"It has been pushed to the end.");
                } else {
                    alert(asdf.indexOf("d")+"It is still there.");
                }
            }
        </script>
    </head>
    <body>
        <input type="button" onclick="myFunction()" value="Show alert">
    </body>
    </html>
4

2 に答える 2

0

asdfこれは、関数内でローカルに宣言しているためです。したがって、関数が終了すると、asdf変数は削除され、次にボタンをクリックしたときに再作成されます。代わりに、グローバルにする必要があります。

<html>
<head>
    <script>
        window.asdf = ["a","b","c","e"];
        function myFunction() {
            if (window.asdf.indexOf("d")==-1) {
                window.asdf.push("d");
                alert(window.asdf.indexOf("d")+"It has been pushed to the end.");
            } else {
                alert(window.asdf.indexOf("d")+"It is still there.");
            }
        }
    </script>
</head>
<body>
    <input type="button" onclick="myFunction()" value="Show alert">
</body>
</html>
于 2013-07-27T21:47:13.223 に答える
0

myFunction を呼び出すたびに、配列asdfが最初から再構築されます。

次のようなものが機能します。

var myFunction = (function () {
    // This line is only run once.
    var asdf = ["a", "b", "c", "e"];

    // This is run with every call to myFunction, and will reuse the array
    return function () {
        if (asdf.indexOf("d") == -1) {
            asdf.push("d");
            alert(asdf.indexOf("d") + "It has been pushed to the end.");
        } else {
            alert(asdf.indexOf("d") + "It is still there.");
        }

    };

}());
于 2013-07-27T21:48:28.280 に答える