Автор Тема: Локални и глобални променливи - предеклариране  (Прочетена 4177 пъти)

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Така, задачата е да се постави var където е необходими, за да се изпълни условието, което е зададено като коментар:
Код
GeSHi (Javascript):
  1. a = 3;
  2. b = 2;
  3.  
  4. function line(x) {
  5.    a = 5;
  6.    b = 4;
  7.    return a*x + b
  8. }
  9.  
  10. //b should be 17
  11. b = line(a) - b;
  12. alert(b);
  13.  
  14. //c should be 21
  15. var c;
  16. c = line(a) - b;
  17. alert(c);
  18.  

Аз смятам, че условието е сбъркано, но задачата е взета от сайта: http://www.codecademy.com/courses/javascript-for-jquery/1?curriculum_id=4fc3018f74258b0003001f0f/#!/exercises/3
Някакви идеи?
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

bvbfan

  • Напреднали
  • *****
  • Публикации: 1056
  • Distribution: KaOS
  • Window Manager: Plasma 5
    • Профил
Не знам какво да ти кажа, аз "хакнах" кода  ;D Според мен идеята на тази задача е просто да се прави разлика между глобална и локална променлива.
Код
GeSHi (Javascript):
  1. a = 3;
  2. b = 2;
  3.  
  4. function line(x) {
  5.    var a = 5;
  6.    var b = 4;
  7.    return a*x + b;
  8. }
  9.  
  10. //b should be 17
  11. b = line(a) - b;
  12. alert(b);
  13.  
  14. //c should be 21
  15. a = 0;
  16. c = line(a) + b;
  17. alert(c);

a и b са глобални променливи, но за функцията line a и b са локални, аз друг смисъл не виждам  ???
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Да, но така c става 36 или там нещо друго беше, не помня точно.
E, с добавяне на: а = 0 става, ама не е това решението.
« Последна редакция: Aug 03, 2012, 14:08 от b2l »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
@b2l От къде разбра, че това не е решението? ... никъде не пише, че не можеш да променяш променливи
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
@borovaka
Цитат
The code to the right behaves unexpectedly because of scope issues. Run it and try to figure out what is going on. Fix it using var
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Еми точно :) Виж какво пише ... точно ти трябва да са локални променливи ако променяш глобална стойност на променлива, която в противен случай, би презаписала стойност на променлива използвана във вътрешността на функцията ... По тази причина използването на локални променливи, решава проблема.
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Нулирането на a (a = 0) не е разрешено, поне аз така тълкувам условието на задачата.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

solarflux

  • Напреднали
  • *****
  • Публикации: 100
    • Профил
задачата е леко сбъркана, но ето едно решение, което минава...
Код
GeSHi (Javascript):
  1. a = 3;
  2. b = 2;
  3.  
  4. function line(x) {
  5.    var a = 5;
  6.    var b = 4;
  7.    return a*x + b
  8. }
  9.  
  10. //c should be 21
  11. c = line(a) + b;
  12. alert(c);
  13.  
  14. //b should be 17
  15. b = line(a) - b;
  16. alert(b);
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Хм, "CodeAcademy", която те занимава с глобални променливи във function scope не си заслужава името ;)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Хм, "CodeAcademy", която те занимава с глобални променливи във function scope не си заслужава името ;)

На мен игричките ми харесват там. Още повече, че можеш да хакваш кода и пак да преминаваш нивата, за да печелиш медали :).
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше