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

作者: meteorsok (花花小蛋糕)   2014-10-20 18:14:07
(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-javascript

http://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/)
: 對於其中的 一小段程式碼有疑問
:
作者: kuangs (kuangs)   2014-10-20 20:04:00
謝謝您的解說,學到一招了!!
作者: swallowcc (guest)   2014-10-20 23:35:00
推一下 @@
作者: mrbigmouth (大嘴先生)   2014-10-21 07:12:00
原來還有這種詭異的寫法 之前看到的是new Function("return this") 也是indirect
作者: tomap41017 (絕夢)   2014-10-21 19:40:00
看過樓上那招,不過這種寫法只留給global就好

Links booklink

Contact Us: admin [ a t ] ucptt.com