2012-08-03 35 views
0

这是一个代码片段任务 - 您应该在其中输入“var”(尽可能多),以便在第一个中获得17个,在第一个中获得21个第二次警报。我之前遇到过这个问题,但仍然无法解决问题。JavaScript - 我应该在哪里放置“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); 

如果将“var”放在b前面的函数中,它会提醒“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

回答

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或四个。

+0

真是太失望了......我开始相信那个给我发这段代码的人在开我的玩笑。 感谢您的详细解释。有时在数学中,证明一个问题没有解决方案的确是解决方案。这就是为什么我会标记你的答案。 – gotqn 2012-08-03 07:19:33

0

让你的功能就是这样,如果你想保持consisitency。在a和b之前使用“var”将使它们位于功能块和该调用的本地。否则,他们会引用全局变量。

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

这并没有给出正确的结果 – 2012-08-03 06:54:15

+0

那是因为你改变了第一次调用bin的值。你不会得到21你想要的。因为B没有更多2,现在17! – 2012-08-03 06:56:53

+0

Amogh,这是一个测验。 – Norguard 2012-08-03 06:58:04

相关问题