作者meteorsok (花花小蛋糕)
标题Re: [问题] 匿名函式 问题 ??
时间Mon Oct 20 18:14:07 2014
(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/)
: 对於其中的 一小段程式码有疑问
: -----------------内文内容----------------
: 在设计程式库时,若有名称想避免别人占用干扰,则有个惯用手法。
: 例如,若不想被别人占用干扰 global 这个名称,则可以如下:
: (function(global) {
: var global.openhome = global.openhome || {};
: ...
: })((0, eval)('this'));
: ------------------------------------------------------
: 想请问一下 文中(0, eval)('this') 作用是甚麽??
: 小弟接触Javascript不深
: 身边也没有高手指导
: 如问题违反规定 请告知
: 谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.32.8.201
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Ajax/M.1413800051.A.A61.html
1F:推 kuangs: 谢谢您的解说,学到一招了!! 10/20 20:04
2F:推 swallowcc: 推一下 @@ 10/20 23:35
3F:推 mrbigmouth: 原来还有这种诡异的写法 之前看到的是 10/21 07:12
4F:→ mrbigmouth: new Function("return this") 也是indirect 10/21 07:13
5F:推 tomap41017: 看过楼上那招,不过这种写法只留给global就好 10/21 19:40