"use strict";
function fib(n) {
var a, b = 1;
for (var i = 3; i <= n; i++) {
var c = a + b;
a = b;
b = c;
}
return b;
}
alert(fib(4));
Asked
Active
Viewed 101 times
0
Harry
- 221,325
ZdraviSmisl
- 599
2 Answers
3
Если Вы инициализируете так переменные var a,b = 1; То фактически для наглядности:
var a, // a = undefined
b = 1;
Когда Вы делаете var c = a + b; Фактически это c = undefined + 1; Что будет равно NaN.
Вместо var a,b=1; используйте var a=1, b=1; Тогда и a и b будут равно 1;
Igor Lut
- 410
-
1var a=b=1; - плохой совет, в этом случае
bутечет в глобальный скоп, а не станет локальной переменной, как задумывалось – Grundy Sep 13 '17 at 06:17 -
-
-
1@Grundy неожиданный синтаксис. В смысле, неожиданно, то для объявления глобальной переменной её нужно объявить без var. – Nick Volynkin Sep 13 '17 at 07:08
-
@NickVolynkin, так исторически сложилось :-) и с этим борются введением директивы
use strict– Grundy Sep 13 '17 at 07:10
var a = b = 1bутечет в глобальный скоп, а не станет локальной переменной, как задумывалось – Grundy Sep 13 '17 at 06:17