Ajax 板


LINE

※ 引述《folio (function(){})()》之銘言: : - ms dom 中,event 發生時,記載 event data 的 object 放在一個 global variable 裡面, : 這個 global variable 叫做 event。 : - 而 global variable 其實就是 global object 的某個 property。 : - 當我們討論 client-side 的時候 global object 就是 window object。 : 綜合以上三點,所以 ms dom 中,handler 需要 event data 的時候,會寫 window.event, : 事實上你寫 event 也是一樣的意思。 : oncilck = Function("if(keyVerify(event)")...) : 當 Function constructor 被 evaluate 的時候,是在 global scope 中 evaluate, : 首先在 javascript 裡面如果是要動態產生 function 的話,並不需要用 Function constructor。 : 寫 function(){} 就可以了,理由一是 Function constructor 要把 function body 交給 : interpreter 處理,這是很昂貴的事情;理由二,這製造了 injection 的時機。 其他部份我懂了 先謝謝你的答覆 不過這點我要解釋一下 我使用new Function()是因為有變數傳遞 function(){toPage(i)} i的值一律都會變成迴圈最後一圈的值 我猜想這是因為 function() 匿名函式(函式實字) 要一直到被呼叫的時候 才會去抓變數職 所以當onclick觸發時 i的值當然就固定在最後的值 但是用 new Function("toPage("+i+")") 就抓得出來 因為函式建構子在宣告這個函式的當下 就已經在解析變數i。 我後來得知匿名函式另一種方法 這應該才是真正的參數傳遞吧: onclick = function(j) { return function(){ toPage(j); } }(i); 透過這種方式 外面那層函式會被立即呼叫 所以變數當然也會立刻解析。 和上面比起來 優點是他傳遞的是變數 而不是值 所以要傳遞參考變數例如物件 單獨new Function就沒用了 一定要用這種方法。 另外就是 只有外面那層要交給interpreter立即處理 不像函式建構子整個function動作都要丟給 interpreter 雖然如此 我想 new Function 還是有它派上用場的時候。 拿我這次寫的東西舉例: function foo(obj, css1, value1, css2, value2) { var f = new Function("obj", "v", "obj.style." + css1 + "= v"); f(obj, value1); f = new Function("obj", "v", "obj.style." + css2 + "= v"); f(obj, value2) } foo(this, "height", "300px", "width", "500px"); 因為函式建構子是將字串轉成程式碼 所以彈性就高出許多 原本code不能放變數的地方 透過new Function就能做出變化。 我個人猜想 jQuery可能也是用類似方法實作的。 至於injection漏洞問題 這我確實就不太明白了。 請問可以舉個例子嗎? 這樣以後也好避免。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.162.203.164 ※ 編輯: StarTouching 來自: 1.162.203.164 (01/19 17:06)
1F:推 s25g5d4:看起來這東西就像eval阿 jQuery不太可能用這種方式 01/19 17:27
2F:推 s25g5d4:jQuery還真的有用到new Function() 當我沒說好了 01/19 17:31
3F:→ StarTouching:對耶 原來eval是這樣用的 我現在才知道 XDDD 01/19 17:46
4F:→ StarTouching:不過既然如此 如果函式建構子有injection問題 01/19 17:46
5F:→ StarTouching:eval()也一樣會有 01/19 17:47
6F:→ StarTouching:http://ppt.cc/ckf- 01/19 17:53
7F:→ s25g5d4:在jQuery裡用到這一段是因為parse JSON 而且它有做valid 01/19 17:57
8F:→ s25g5d4:可以盡量避免掉XSS的問題 eval本來就有這樣的問題沒錯 01/19 17:58
9F:→ s25g5d4:基本上現在主要瀏覽器的最新版本都有原生parseJSON 01/19 17:59
10F:→ s25g5d4:所以用jQuery遇到new Function的機率幾乎等於零 01/19 17:59
11F:推 s25g5d4:另外就是你提供的例子其實有更好的寫法 像這種形況 01/19 18:04
12F:→ s25g5d4:可以改用obj.style[css]=value 01/19 18:05
13F:→ s25g5d4:唯background-color這種命名方式要改成駱駝命名法 01/19 18:06
14F:推 s25g5d4:http://jsfiddle.net/fYVMx/2/ 01/19 18:39
15F:→ emn178:closure是javascript很重要的特性,也是正確的做法 01/19 21:01







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP