关于 JavaScript 的 while 循环

2015-07-05 10:49:01 +08:00
 cc7756789
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返回最后的结果

3936 次点击
所在节点    JavaScript
22 条回复
FrankFang128
2015-07-05 10:52:27 +08:00
你用 python 不就好了。你推动各大浏览器厂商改进JS语法也可以哦。
zonghua
2015-07-05 10:56:08 +08:00
好厉害,斐波那契都会算哦
cc7756789
2015-07-05 10:57:21 +08:00
额,没有攻击语言的意思,只是搞不懂内部的原理。
loading
2015-07-05 10:58:53 +08:00
看下 go ,只有 for ,也挺好的。
laurent
2015-07-05 11:06:17 +08:00
JavaScript初始化的n是1,python是0,所以最后要return
JavaScript好像是不支持多返回值,所以需要用临时变量t
pH
2015-07-05 11:13:26 +08:00
小白,为什么function后面有个*
Garwih
2015-07-05 11:19:53 +08:00
不用临时变量你可以这么写:
b = a + b;
a = b - a;
sciooga
2015-07-05 11:21:00 +08:00

这样就不用 t 了
sciooga
2015-07-05 11:22:26 +08:00
little_cup
2015-07-05 11:23:30 +08:00
也不能要求各个语言都有这样类似py元组的语法糖呀……
ispinfx
2015-07-05 11:25:13 +08:00
为什么nmax不直接写默认值?
vv314
2015-07-05 11:31:59 +08:00
javascript与Python语法是有区别的,
在js里如果“a, b = b, a+b”这样写,相当于执行了三条语句:
a;
b = b;
a + b;
adspe
2015-07-05 11:48:11 +08:00
@pH 生成器语法
keyanzhang
2015-07-05 11:55:16 +08:00
用 ES6 就可以和 Python 写得一样:
mangocool
2015-07-05 11:56:46 +08:00
会写scala么
des
2015-07-05 14:15:08 +08:00
@keyanzhang firefox对ES6支持最全吧
keyanzhang
2015-07-05 15:28:24 +08:00
@des 用 babel 编译。
zhuangzhuang1988
2015-07-05 16:52:45 +08:00
试试Coffeescript!!!
imn1
2015-07-05 17:46:47 +08:00
你应该先了解 python 的
a, b = b, a+b
实际上是 (a, b) = (b, a+b) 元组省略括号的写法
看上去像是其他语言swap函数,但实际上不是
hayao650
2015-07-06 10:15:30 +08:00
@pH 那个是generator

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203415

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX