[問題] 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