2012-08-03 31 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

相關問題