
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 年 7 月 5 日 via Android 你用 python 不就好了。你推动各大浏览器厂商改进JS语法也可以哦。 |
2 zonghua 2015 年 7 月 5 日 好厉害,斐波那契都会算哦 |
3 cc7756789 OP 额,没有攻击语言的意思,只是搞不懂内部的原理。 |
4 loading 2015 年 7 月 5 日 看下 go ,只有 for ,也挺好的。 |
5 laurent 2015 年 7 月 5 日 Javascript初始化的n是1,python是0,所以最后要return Javascript好像是不支持多返回值,所以需要用临时变量t |
6 pH 2015 年 7 月 5 日 小白,为什么function后面有个* |
7 Garwih 2015 年 7 月 5 日 不用临时变量你可以这么写: b = a + b; a = b - a; |
8 sciooga 2015 年 7 月 5 日 这样就不用 t 了 |
9 sciooga 2015 年 7 月 5 日 |
10 little_cup 2015 年 7 月 5 日 也不能要求各个语言都有这样类似py元组的语法糖呀…… |
11 ispinfx 2015 年 7 月 5 日 为什么nmax不直接写默认值? |
12 vv314 2015 年 7 月 5 日 Javascript与Python语法是有区别的, 在js里如果“a, b = b, a+b”这样写,相当于执行了三条语句: a; b = b; a + b; |
14 keyanzhang 2015 年 7 月 5 日 |
15 mangocool 2015 年 7 月 5 日 会写scala么 |
16 des 2015 年 7 月 5 日 @keyanzhang firefox对ES6支持最全吧 |
17 keyanzhang 2015 年 7 月 5 日 @des 用 babel 编译。 |
18 zhuangzhuang1988 2015 年 7 月 5 日 试试Coffeescript!!! |
19 imn1 2015 年 7 月 5 日 你应该先了解 python 的 a, b = b, a+b 实际上是 (a, b) = (b, a+b) 元组省略括号的写法 看上去像是其他语言swap函数,但实际上不是 |
21 mingyun 2015 年 7 月 12 日 @keyanzhang 求网址 浏览器不支持运行es6 |
22 keyanzhang 2015 年 7 月 14 日 |