1

簡単な電卓の作成を求める演習に行き詰まっています。ユーザー入力は別の関数に委任されるため、行を繰り返さずにプログラムを減算、乗算、および除算に拡張できます。

エラーは次のとおりです。

「Uncaught ReferenceError: x が定義されていません」

<!DOCTYPE HTML>
<html>
    <head>
        <title>Lesson 6 Lab Exercise 3 - Calculator with user input</title>
            <script language="javascript" type="text/javascript">
                function getNumbers()
                {
                    var x = prompt("Enter the first number:");
                    var y = prompt("Enter the second number:");
                    x = parseInt(x);
                    y = parseInt(y);
                }

                function addition()
                {
                    getNumbers();   
                    document.write(x + "+" + y + "=" + (x+y));
                }
            </script>
    </head>
    <body>
        <input type="button" value="Add" onclick="addition()">
    </body>
</html>
4

4 に答える 4

1

コードを修正し、x と y の両方が数値かどうかのチェックを追加しました。

<!DOCTYPE HTML>
<html>
    <head>
        <title>Lesson 6 Lab Exercise 3 - Calculator with user input</title>
            <script language="javascript" type="text/javascript">
              var Calculator={
                x:0,
                y:0,
                getNumbers:function()
                {
                    // reset x and y
                    this.x=NaN;
                    this.y=NaN;
                    while(isNaN(this.x)){
                      this.x = prompt("Enter the first number:");
                      this.x = parseFloat(this.x);
                    }
                    while(isNaN(this.y)){
                      this.y = prompt("Enter the second number:");
                      this.y = parseFloat(this.y);
                    }
                },
                addition:function()
                {
                    this.getNumbers();   
                    document.write(this.x + "+" + this.y + "=" + (this.x+this.y));
                }
              }
            </script>
    </head>
    <body>
        <input type="button" value="Add" onclick="Calculator.addition()">
    </body>
</html>
于 2013-07-01T00:04:37.770 に答える
1

問題は、関数のスコープ内で定義されているxことです。悪い解決策は、andを外側のスコープで宣言するか、最悪の場合、グローバル スコープで宣言することです。良い解決策は、関数の値と関数から値を返し、後でそれらを使用することです。ygetNumbers()xyxygetNumbers

 function getNumbers() {
     var x = prompt("Enter the first number:");
     var y = prompt("Enter the second number:");
     x = parseInt(x);
     y = parseInt(y);
     return [x, y];
}

function addition(){
    var [x, y] = getNumbers();   
    document.write(x + "+" + y + "=" + (x+y));
}
于 2013-07-01T00:04:54.943 に答える
1
                var x;
                var y;
                function getNumbers()
                {
                    x = prompt("Enter the first number:");
                    y = prompt("Enter the second number:");
                    x = parseInt(x);
                    y = parseInt(y);
                }

                function addition()
                {
                    getNumbers();   
                    document.write(x + "+" + y + "=" + (x+y));
                }

関数の外で変数を定義して、両方のメソッドのスコープ内にあるようにします。変数をグローバル空間に追加しないように、コード ブロック全体をクロージャで定義できます。

于 2013-07-01T00:00:49.600 に答える