关于 Javascript 的 while 循环 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
cc7756789
V2EX    Javascript

关于 Javascript 的 while 循环

  •  
  •   cc7756789 2015-07-05 10:49:01 +08:00 4427 次点击
    这是一个创建于 3779 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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返回最后的结果

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

    这样就不用 t 了
    sciooga
        9
    sciooga  
       2015-07-05 11:22:26 +08:00
    little_cup
        10
    little_cup  
       2015-07-05 11:23:30 +08:00
    也不能要求各个语言都有这样类似py元组的语法糖呀……
    ispinfx
        11
    ispinfx  
       2015-07-05 11:25:13 +08:00
    为什么nmax不直接写默认值?
    vv314
        12
    vv314  
       2015-07-05 11:31:59 +08:00
    Javascript与Python语法是有区别的,
    在js里如果“a, b = b, a+b”这样写,相当于执行了三条语句:
    a;
    b = b;
    a + b;
    adspe
        13
    adspe  
       2015-07-05 11:48:11 +08:00 via Android
    @pH 生成器语法
    keyanzhang
        14
    keyanzhang  
       2015-07-05 11:55:16 +08:00
    用 ES6 就可以和 Python 写得一样:
    mangocool
        15
    mangocool  
       2015-07-05 11:56:46 +08:00
    会写scala么
    des
        16
    des  
       2015-07-05 14:15:08 +08:00
    @keyanzhang firefox对ES6支持最全吧
    keyanzhang
        17
    keyanzhang  
       2015-07-05 15:28:24 +08:00
    @des 用 babel 编译。
    zhuangzhuang1988
        18
    zhuangzhuang1988  
       2015-07-05 16:52:45 +08:00
    试试Coffeescript!!!
    imn1
        19
    imn1  
       2015-07-05 17:46:47 +08:00
    你应该先了解 python 的
    a, b = b, a+b
    实际上是 (a, b) = (b, a+b) 元组省略括号的写法
    看上去像是其他语言swap函数,但实际上不是
    hayao650
        20
    hayao650  
       2015-07-06 10:15:30 +08:00
    @pH 那个是generator
    mingyun
        21
    mingyun  
       2015-07-12 20:25:25 +08:00
    @keyanzhang 求网址 浏览器不支持运行es6
    keyanzhang
        22
    keyanzhang  
       2015-07-14 10:35:40 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2790 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 07:35 PVG 15:35 LAX 23:35 JFK 02:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86