javascript - 我应该放在哪里" ave"为了获得具体的价值

时间:2012-08-03 06:42:35

标签: javascript scope

这是一个代码片段任务 - 您应该在其中输入“var”(尽可能多),以便在第一个中获得17,在第二个警报中获得21。我之前遇到过这个问题,但仍无法解决问题。

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”警告。下一个警报给我们46因为b的新值,由函数返回。

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

2 个答案:

答案 0 :(得分:1)

完全按照给出的方式使用给定的内容是不可能的。

我的意思是呼叫:

c = line(a) + b;

取决于b的值,即:

中的赋值
b = line(a) - b;

然后100%不可能让a成为一个非常小的数字,或使b成为一个非常大的负数来使数学运作。

因此,我认为他们打算分别进行两次检查。

最佳情况,如果我们尝试包含b=17

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

这是你将获得的最小,假设你背对背地跑两个。 即使你这样做,你也不会在第一次运行时得到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或者四个。 / p>

答案 1 :(得分:0)

如果你想保持一致,请保持这样的功能。在a和b之前使用“var”将使它们成为功能块和该调用的本地。否则他们将引用全局变量。

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