3

私はJavascriptの世界に不慣れで、先生が割り当てたこの割り当てを理解しようとしています。期待されることについての彼の説明は次のとおりです。

  1. プログラムを起動する関数を作成します。start()と呼んでください

  2. start()関数から、getValue()という関数を呼び出します。

  3. getValue()関数は、2乗される数値をユーザーから取得します。

  4. また、start関数から、makeSquare()という関数を呼び出します。

  5. makeSquare()関数は、getValue()関数でユーザーが受け取った数値を2乗します。

  6. makeSquare()関数内で数値を2乗した結果を必ず表示してください。

これが私がこれまでに持っているものです:

function start() {

    getValue();
    getSquare();
}

function getValue() {

    var a = prompt("Number please")
}

function getSquare() {

    var b = Math.pow(a)
    document.write(b)
}

start()

この割り当ては、HTMLタグで機能する必要はありません。プロンプトボックスが機能するだけですが、他には何も機能しません。使用できない方法で変数を使用していますか?

4

5 に答える 5

5

あなたは近かった。しかし、あなたはスコープと関数の正確な使い方を理解していないようですpow

Math.pow:

Math.pow底と指数の2つのパラメーターを取ります。あなたの例では、ベースのみを提供します。関数が値を返し、値undefinedをに設定するため、問題が発生しbます。これは、それがどのように見えるべきかです(あなたがそれを二乗したい場合):

Math.pow(a, 2);

スコープ:

すべての関数には独自のスコープがあります。関数内から関数外で作成された他の変数や関数にアクセスできます。ただし、別の関数内で作成された関数や変数にアクセスすることはできません。次の例を見てください。

var c = 5;

function foo() { // we have our own scope
   var a = c; // Okay
}

var b = a; // NOT okay. a is gone after the function exits.

関数はプライベートであると言えます。唯一の例外は、関数から値を返すことができることです。returnキーワードを使用して値を返します。その隣の式は、関数の戻り値です。

function foo() {
    return 5;
}

var a = foo(); // a === 5

foo()関数を呼び出すだけでなく、その戻り値を返します。戻り値が指定されていない関数の戻り値はundefined。です。とにかく、あなたの例ではこれを行います:

function getValue() {
    var a = prompt("Number please")
}

次のようにアクセスします。

// ...
var b = Math.pow(a)

エラーが表示されますか?a関数で定義されているため、関数の外部からアクセスすることはできません。

これは改訂されたコードである必要があります(注:常にセミコロンを使用してください。必要に応じてセミコロンを含めました):

function start() {
    getSquare();
}

function getValue() {

    var a = prompt("Number please");
    return a;
}

function getSquare() {

    var b = Math.pow(getValue(), 2); // getValue() -> a -> prompt(...)
    document.write(b);
}

start();
于 2012-10-06T22:05:10.830 に答える
0

あなたはこれを試すことができます。

<script type="type/javascript">
function start(){
makeSquare(getvalue());
}

function getvalue(){
return prompt("enter a number");
}

function makeSquare(a){
var result=Math.pow(a,2);
alert(result);
}
start();
</script>
于 2012-12-26T00:10:53.590 に答える
0
  1. 値を返すgetValue()必要があります。そうすれば、値をgetSquare()関数に渡すことができます。

  2. 私の意見では、常に各行をで終了する必要があります;

  3. おそらく、ユーザー入力を数値に解析する必要があります。そのためにあなたは使うことができますparseFloat(string)

  4. Math.pow2つの引数を取るので、正方形を取得するには、それを2呼び出すときに2番目の引数として渡す必要があります。

私はいくつかの明確なコメントであなたのコードを編集しました:

function start() {
    // Catch the value returned by the function
    var value = getValue();
    // Pass the returned value to the square-function
    getSquare(value);
}

function getValue() {
    // Parse the user input into a number, and return it    
    return parseFloat(prompt("Number please"));
}

// Let the square-function take the user input as an argument
function getSquare(a) {  
    // Math.pow takes a second argument, which is a number that specifies a power
    var b = Math.pow(a, 2);
    document.write(b);
}

start();

別の、あまり良くない方法

JavaScriptでは、変数スコープは関数に基づいています。変数がキーワードを使用して宣言されている場合、その変数はvarその関数とその子関数でのみ使用できます。キーワードなしで宣言された場合var、または関数の外部で宣言された場合、グローバル変数になり、そのページで実行されるコードからアクセスできます。

varそうは言っても、関数内のキーワードを取り除くことができます。getValue()これにより、変数がaグローバルになります。getSquare()次に、例で試した方法でアクセスできます。

ただし、これは一般的にはお勧めできません。グローバル名前空間を「汚染」し、同じ名前のグローバル変数を使用して別のスクリプトを誤って作成するリスクがあり、あらゆる種類の問題が発生する可能性があります。スクリプトは同じ変数で動作し始めます。

于 2012-10-06T21:52:16.260 に答える
0

これは宿題なので、直接答えることはしませんが、ここにいくつかの手がかりがあります。

javascriptでは、変数はスコープされた関数です。つまり、var a内部getValueはそこでのみ利用可能です。

関数から値を取得できreturnます。

関数はjavascriptのファーストクラスオブジェクトであるため、パラメーターとして他の関数に渡し、最後にその関数内で呼び出すことができます。

于 2012-10-06T21:54:08.070 に答える
0

使用できない方法で変数を使用していますか?

はい、そこに問題があります。ほとんどのプログラミング言語の変数には、それらが利用できる場所を決定するスコープがあります。あなたの場合、abはそれぞれ関数とのローカル変数です。これは、それらが宣言されている関数の外部では使用できないことを意味します。getValue()makeSquare()

一般的に言って、これは良いことです。プログラムを介したデータの「フロー」をより明確にするために、変数に制限付きスコープを使用する必要があります。変数をグローバルにする代わりに、戻り値とパラメーターを使用して関数間でデータを渡します。

function start() {
    var a = getValue();
    makeSquare(a);
}

// Return a value entered by the user
function getValue() {
    return prompt("Number please")
}

// Write the square of the `a` parameter into the document
function makeSquare(a) {
    var b = Math.pow(a)
    document.write(b)
}
于 2012-10-06T22:02:00.400 に答える