[问题] js的读取顺序

楼主: oCrazyDucko (晚安)   2018-08-25 00:14:07
https://i.imgur.com/cB5p0Ns.jpg
先附图
各位大大,这个结果跑出来是
3
无限循环的11
我知道为什么跑出3跟11
但请问function bar跟for不是平行区块的吗
为什么for的循环会一直跑去读i=3呢
作者: D122 (小黑球)   2017-03-28 10:51:00
不像我 30MM又大又长寿 我可是会活到22世纪的男人
作者: a7417tw (喵喵)   2017-03-28 11:41:00
楼上30mm是新标准吗
作者: hippobear (河马熊)   2017-03-28 11:58:00
30nm会成仙吗
作者: oToToT (屁孩)   2018-08-25 01:11:00
你有了解javascript的scope吗用var宣告出来的变量会在foo里都可见(var的特性),所以当所以呼叫bar时自然会去找到foo里的,要符合预期的话应该改成let
作者: jhnny97 (≡(  ゚Д゚))   2018-08-25 10:48:00
不是阿,foo里面多放一个变量宣告就好了啊,let、var都可
楼主: oCrazyDucko (晚安)   2018-08-25 18:06:00
https://i.imgur.com/cwrkaty.jpg 宣告变量可以解决这个问题,但为什么I=3能够修改for循环的i呢
作者: jhnny97 (≡(  ゚Д゚))   2018-08-25 18:34:00
你要不要用debug模式一步步跑?看看scope和变量的变化?
作者: xdraculax (首席怪叔叔)   2018-08-25 20:13:00
bar 里的 i 前面没有 let 或 var, 默认会优先继承上层的,因此 bar 的 i 跟 foo 的 i 也就是 for 的 i 指的是同一个
作者: flowwinds (..)   2018-08-28 12:51:00
因为for中的var i是function scope的
作者: youtuuube000 (小孩)   2018-08-30 00:50:00
写这种code的该打....
作者: randall1234 (威轩沙)   2017-01-21 09:23:00
这样写你的i一直都是3你知道吗,(3+1)*2+3只会喷出一堆11

Links booklink

Contact Us: admin [ a t ] ucptt.com