0

これはコード フラグメント タスクです。最初のアラートで 17 を取得し、2 番目のアラートで 21 を取得するには、"var" (必要な数だけ) を入力する必要があります。以前にこれに会ったことがあると思いますが、それでも問題を解決できませんでした。

a = 3;
b = 2;

function line(x) {
    a = 5;
    b = 4;
    return a*x + b
}

//b should be 17
b = line( a ) - b;
alert( b );

//c should be 21
c = line ( a ) + b;
alert(c);

関数内で b の前に「var」を入れると、「17」と警告します。関数によって返される b の新しい値により、次のアラートでは 46 が返されます。

function line(x) {
     a = 5;
    var b = 4;
    return a*x + b
}

それがタスクのソースです:

http://www.codecademy.com/courses/javascript-for-jquery/1?curriculum_id=4fc3018f74258b0003001f0f/#!/exercises/3

4

2 に答える 2

1

与えられたものを、与えられた通りに正確に使用することは不可能です。

つまり、次の呼び出しの場合です。

c = line(a) + b;

は、次の割り当てである b の値に依存します。

b = line(a) - b;

a次に、数学を機能させるために、非常に小さい数を作成したりb、非常に大きな負の数を作成したりすることは100%不可能です。

したがって、それらは 2 つの別個のチェックであることを意図していると私は信じています。

含めようとしている場合の最良のシナリオb=17:

a = 3;
3 * 5 = 15 + 4 = 19 + 4 = 23;

これは、2 つを連続して実行すると仮定すると、得られる最小のものです。そんなことしても一発目は出ませんよねb = line(a) - b = 17

それが書かれていた場合:

c = line(a) - b;
d = line(a) + b;

次に、両方を連続して実行して、期待される結果を得ることができます。

または、次を実行できます。

var a = 3,
    b = 2;

function line (x) {
    var a = 5,
        b = 4;
    return a*x + b;
}

b = line(a) - b;

そして17を取得します。

次に、実行できます:

var a = 3,
    b = 2;

function line (x) {
    var a = 5,
        b = 4;
    return a*x + b;
}

c = line(a) + b;

(つまり、別のインスティゲーターを使用したまったく同じセットアップでb、前の呼び出しの戻り値から保存された値はありません)、目的の結果を取得します。

しかし、コードに何もvarせずに aまたは 4を追加するだけで、両方を次々に実行して、両方が機能することを期待することはできません。

于 2012-08-03T07:14:41.520 に答える
0

一貫性を維持したい場合は、このように機能を維持してください。aとbの前に「var」を使用すると、関数ブロックとその呼び出しに対してローカルになります。それ以外の場合は、グローバル変数を参照します。

function line(x) {
    var a = 5;
    var b = 4;
    return a*x + b
}
于 2012-08-03T06:49:05.113 に答える