Fer*_*gal 42 javascript dot.js
查看doT.js源代码:
https://raw.github.com/olado/doT/master/doT.js
这是做什么的?
(function(){ return this || (0,eval)('this'); }()).doT = doT;
Run Code Online (Sandbox Code Playgroud)
对我来说,看起来它正在创建一个全局变量,window.doT.如果这就是它的全部,那么为什么不呢:
window.doT = doT;
Run Code Online (Sandbox Code Playgroud)
?
ale*_*lex 54
它正在获取对全局对象的引用,以便分配doT给它.这通常是因为使用JavaScript库/框架/等,其一个全局标识符需要暴露给外部世界.
至于为什么它不简单window.doT = doT;,这是因为全局对象并不总是window,例如,在非浏览器环境中.window此代码执行时,也可以分配到其他位置.
如果this已经真实,例如,一个对象window,它将返回.它很可能window(至少在浏览器中),因为普通函数调用应该将其ThisBinding设置为全局对象.否则,它将eval()在全局范围内执行,因为间接调用eval()将其范围设置为全局,而不是调用环境的范围.
要实现间接调用,您必须eval()间接调用,即您不能只调用它eval().您可以使用(0, eval)它来调用它.在这种情况下,这依赖于逗号运算符返回最后计算的表达式eval.前面的操作数是什么并不重要.同样,(0||eval)()会工作.
至于为什么身体是this,即参数eval(),即作为字符串执行的代码.它将返回this全局范围,它始终是全局对象.
它现在并不真正相关,但在旧的IE中,您需要使用execScript()在全局范围内执行代码.我不记得到底需要哪些版本的IE.
| 归档时间: |
|
| 查看次数: |
5538 次 |
| 最近记录: |