Re: [問題] 匿名函式 問題 ??

看板Ajax作者 (花花小蛋糕)時間11年前 (2014/10/20 18:14), 編輯推噓4(401)
留言5則, 4人參與, 最新討論串2/2 (看更多)
(0, eval)('this') (0, eval) 是個Comma Operator ( http://es5.github.io/#x11.14 ) Comma Operator的特性會從左到右執行內容,然後回傳最後一個參數結果 前面這個0可以不理會,所以(0, eval)('this')可以想像成以下式子 eval('this') 值得注意的是此時的(0, eval)是indirect call 意思是這個eval所使用的scope是global的 (通常是window) 所以這個this就會回傳window了 可以參考這裡回應的sample code http://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascripthttp://tinyurl.com/d69x8cu code: var x = 'outer'; (function() { var x = 'inner'; eval('console.log("direct call: " + x)'); (1,eval)('console.log("indirect call: " + x)'); })(); 很有趣:) ※ 引述《kuangs (kuangs)》之銘言: : 最近看到一篇技術文章 在討論"Javascript 語言核心" : (出處 : http://www.codedata.com.tw/uncategorized/essential-javascript-19-namespace/) : 對於其中的 一小段程式碼有疑問 : -----------------內文內容---------------- : 在設計程式庫時,若有名稱想避免別人佔用干擾,則有個慣用手法。 : 例如,若不想被別人佔用干擾 global 這個名稱,則可以如下: : (function(global) { : var global.openhome = global.openhome || {}; : ... : })((0, eval)('this')); : ------------------------------------------------------ : 想請問一下 文中(0, eval)('this') 作用是甚麼?? : 小弟接觸Javascript不深 : 身邊也沒有高手指導 : 如問題違反規定 請告知 : 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.8.201 ※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1413800051.A.A61.html

10/20 20:04, , 1F
謝謝您的解說,學到一招了!!
10/20 20:04, 1F

10/20 23:35, , 2F
推一下 @@
10/20 23:35, 2F

10/21 07:12, , 3F
原來還有這種詭異的寫法 之前看到的是
10/21 07:12, 3F

10/21 07:13, , 4F
new Function("return this") 也是indirect
10/21 07:13, 4F

10/21 19:40, , 5F
看過樓上那招,不過這種寫法只留給global就好
10/21 19:40, 5F
文章代碼(AID): #1KHE1pfX (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1KHE1pfX (Ajax)