July 2009
2 posts
Javascript 明明就不是繪圖用的語言,硬是要用它來做特效真的是非常找死;不論是在瀏覽器相容性或者實作細節都非常瑣碎。
Adios
MSN
下午 2: 47
http: //gist.github.com/145552
下午 2: 47
case 2 效率比較好 ?
下午 2: 48
1 跟 3 的行為會不會一樣 ?
[王小旺] 心裡有了人就會比較踏實
MSN
下午 2: 48
wait
下午 2: 49
效率: 2>1, 3 我還在看
下午 2: 49
效率: 2=3 > 1
下午 2: 50
I guess.
Adios
MSN
下午 2: 50
3 不會因為每次 test.reorder() 執行完,沒有人要用 qsort() 就 free 掉 ?
下午 2: 50
沒有人 reference qsort()
[王小旺] 心裡有了人就會比較踏實
MSN
下午 2: 51
function 應該會一直被 reference 吧?
Adios
MSN
下午 2: 51
ok
[王小旺] 心裡有了人就會比較踏實
MSN
下午 2: 52
I guess, 不過應該要看 JS engine
下午 2: 52
但是至少可以確定不會消失
Adios
MSN
下午 2: 52
function 都不會消失嗎 ?
[王小旺] 心裡有了人就會比較踏實
MSN
下午 2: 52
應該是吧
下午 2: 52
除非是 var f = function (); f = new_value; 這種情況
Adios
MSN
下午 2: 53
oh
[王小旺] 心裡有了人就會比較踏實
MSN
下午 2: 53
去翻 JS engine 的 source code 吧
下午 2: 53
找到再跟我說
Adios
MSN
下午 2: 54
好像會消失噎
下午 2: 54
general idea is that if an object becomes un-referable (by having no remaining references to it left accessible to executing code) it becomes available for garbage collection
下午 2: 54
object
下午 2: 55
the Activation/Variable object and any objects created within the execution context, including function objects, would no longer be accessible
下午 2: 55
http: //www.jibbering.com/faq/faq_notes/closures.html#clAtGb
下午 2: 55
也許除非引擎有比較聰明 不然應該都會刪掉
下午 2: 56
還是說在 prototype 的 List.reorder() { } 裡面也算 reference ? 因為 List 一直在 所以 reference 一直在 ?
[王小旺] 心裡有了人就會比較踏實
MSN
下午 2: 58
我覺得可能是:
因為你有用到, 所以 compile 過程中幫你偷建一個 ref?
下午 2: 58
不然像 Forming Closure 例子裡面的 localVar 怎麼辦?
下午 3: 00
我懂了!
下午 3: 01
var qsort = function () { /* code 1 */ };
var qsort = function () { /* code 2 */ }; /* 這時候 code 1 的 function 會失去 ref, 然後被 gc */
下午 3: 01
所以你宣告 function qsort() {...} 就不會發生這樣的事情
下午 3: 02
不太對, 因為離開 (function () {})() 的 scope 了...
下午 3: 03
所以我猜是 compile-time 偷加 reference.
Adios
MSN
下午 3: 03
真是太神祕了
下午 3: 03
可是我不想讓外面用到 qsort()
下午 3: 03
所以想寫成 3
下午 3: 03
我鮮血 3 在測看看那樣比較快
[王小旺] 心裡有了人就會比較踏實
MSN
下午 3: 04
理論上絕不會是每次重新產生, 因為那個 anoymous function 只會 run 一次
下午 3: 04
每次產生比偷加 ref 還難做
下午 3: 05
1. 就有可能每次重新產生一個 qsort.
下午 3: 05
這樣才做得到 closure
Adios
MSN
下午 3: 05
在 static scope 的時候 case 3的 reorder () 就會偵測到 qsort 在 scope 裡面 因此就建立 referenece 了吧 我猜
[王小旺] 心裡有了人就會比較踏實
MSN
下午 3: 06
static scope?
下午 3: 06
你說的應該就是我說得 compile-time 產生的意思?
Adios
MSN
下午 3: 06
應該吧
下午 3: 06
XD
[王小旺] 心裡有了人就會比較踏實
MSN
下午 3: 06
Adios
MSN
下午 3: 06
js 很複雜
下午 3: 07
比吸還南
[王小旺] 心裡有了人就會比較踏實
MSN
下午 3: 08
因為你沒研究 C 的 compiler
下午 3: 08
dynamic lang 本來就比較麻煩
Adios
MSN
下午 3: 08
喔 Automatic GC 應該只會針對 後來產生的做 GC 吧 ? 所以在 compile time 舊有的就不會動才是
下午 3: 08
對 runtime 做 GC