function* fib(max){
var
t,
n = 1,
a = 0,
b = 1;
while ( n<max ){
yield a;
t = a+b;
a = b;
b = t;
n++;
}
return a;
}
而Python可以直接这么粗暴的写
def fib(nmax=None):
nmax = nmax or 10
n, a, b = 0, 0, 1
while n < nmax:
yield a
a, b = b, a+b
n += 1
然后把我搞晕了,我都不会写fibonacci了,为什么JS还需要个临时变量t, 如果 a, b = b, a+b结果是不正确的,然后为什么在循环体外还需要return返回最后的结果
1
FrankFang128 2015-07-05 10:52:27 +08:00 via Android
你用 python 不就好了。你推动各大浏览器厂商改进JS语法也可以哦。
|
2
zonghua 2015-07-05 10:56:08 +08:00
好厉害,斐波那契都会算哦
|
3
cc7756789 OP 额,没有攻击语言的意思,只是搞不懂内部的原理。
|
4
loading 2015-07-05 10:58:53 +08:00
看下 go ,只有 for ,也挺好的。
|
5
laurent 2015-07-05 11:06:17 +08:00
JavaScript初始化的n是1,python是0,所以最后要return
JavaScript好像是不支持多返回值,所以需要用临时变量t |
6
pH 2015-07-05 11:13:26 +08:00
小白,为什么function后面有个*
|
7
Garwih 2015-07-05 11:19:53 +08:00
不用临时变量你可以这么写:
b = a + b; a = b - a; |
8
sciooga 2015-07-05 11:21:00 +08:00
这样就不用 t 了 |
9
sciooga 2015-07-05 11:22:26 +08:00
|
10
little_cup 2015-07-05 11:23:30 +08:00
也不能要求各个语言都有这样类似py元组的语法糖呀……
|
11
ispinfx 2015-07-05 11:25:13 +08:00
为什么nmax不直接写默认值?
|
12
vv314 2015-07-05 11:31:59 +08:00
javascript与Python语法是有区别的,
在js里如果“a, b = b, a+b”这样写,相当于执行了三条语句: a; b = b; a + b; |
14
keyanzhang 2015-07-05 11:55:16 +08:00
|
15
mangocool 2015-07-05 11:56:46 +08:00
会写scala么
|
16
des 2015-07-05 14:15:08 +08:00
@keyanzhang firefox对ES6支持最全吧
|
17
keyanzhang 2015-07-05 15:28:24 +08:00
@des 用 babel 编译。
|
18
zhuangzhuang1988 2015-07-05 16:52:45 +08:00
试试Coffeescript!!!
|
19
imn1 2015-07-05 17:46:47 +08:00
你应该先了解 python 的
a, b = b, a+b 实际上是 (a, b) = (b, a+b) 元组省略括号的写法 看上去像是其他语言swap函数,但实际上不是 |
21
mingyun 2015-07-12 20:25:25 +08:00
@keyanzhang 求网址 浏览器不支持运行es6
|
22
keyanzhang 2015-07-14 10:35:40 +08:00
|