Javascript 试图理解evercookie中的代码构造

Javascript 试图理解evercookie中的代码构造,javascript,function,scope,anonymous-function,Javascript,Function,Scope,Anonymous Function,我一直在努力理解Samy Kamkar的evercookie代码,他至少做了一件我根本不懂的事情。相关代码可在线查看,网址为 我的问题是关于这段代码如何设置evercookie本身。相关构造: var evercookie = (function () { this._class = function() { ... }; return _class; })(); 我理解evercookie是一个构造函数(尽管没有遵循构造函数大写的惯例),我理解evercooki

我一直在努力理解Samy Kamkar的evercookie代码,他至少做了一件我根本不懂的事情。相关代码可在线查看,网址为

我的问题是关于这段代码如何设置evercookie本身。相关构造:

var evercookie = (function () {
  this._class = function() { 
      ... 
  }; 
  return _class;
})();

我理解
evercookie
是一个构造函数(尽管没有遵循构造函数大写的惯例),我理解
evercookie
被设置为返回一个匿名的、自动执行的函数。除非我比我想象的更困惑,
evercookie
应该设置为
\u class
在外部(匿名)函数范围内的值。我不明白的是:
\u class
从哪里获得值<代码>\u类与
此不同。\u类
,并且在该函数中没有其他对
\u类
的引用
\u类
此相同。\u类
因为
引用了自动执行函数中的窗口对象。它本质上使
\u类
函数成为一个全局变量


基本思想如下:

我认为这是一个。\u类与var\u类几乎相同。正在创建名为_class的局部变量。就像window.test和testOoh一样。好啊不过很奇怪。有什么好的理由这样写吗?我是否正确地理解了你所说的,就像他一直在写《课堂》或《课堂》一样,而且这样写的唯一额外效果是晦涩?我敢打赌,他并不完全理解他在那里做什么。考虑到是谁写的,我更倾向于打赌,他只是出于纯粹的矛盾而加入了一些非常模糊的东西。我不是说他是个白痴,但可能只是错过了它,因为它在技术上是有效的,即使它不是最佳实践。我有时会生成一个变量字符串,比如
varone=1,two=2;三=3
并错过了
two
之后的分号,这使得
two
成为全局的。除非你必须这样做,否则把事情全球化真的不是一个好主意。作为免责声明,我不熟悉他的项目,并且基于你上面的问题,他可能有一个合理的理由这样做,在有限的背景下,我可能不理解。如果你相信他知道自己在做什么,我不会改变它,只是要知道,如果他们是全球性的,你可以覆盖内部。