3

以下代码来自google analitycs api。我可以想象其中一些目的是为了加密脚本,而另一些目的是为了减小文件大小。但我觉得还有更多这些。除了这些,这种宣誓的目的还能是什么?

var g = void 0, 
i = !0, 
j = null, 
k = !1, 
aa = encodeURIComponent, 
ba = Infinity, 
fa = setTimeout, 
ga = decodeURIComponent, 
l = Math;
function ha(a,b){
    return a.name=b
    }

var 
m = "push",
ia = "test",
ja = "slice",
o = "replace",
ka = "load", 
la = "floor",
ma = "charAt",
na = "value",
q = "indexOf",
oa = "match",
pa = "port",
qa = "createElement",
ra = "path",
r = "name",
t = "host",
u = "toString",
v = "length",
w = "prototype",
sa = "clientWidth",
x = "split",
ta = "stopPropagation",
ua = "scope",
y = "location",
va = "search",
z = "protocol",
wa = "clientHeight",
xa = "href",
A = "substring",
ya = "apply",
za = "navigator",
B = "join",
C = "toLowerCase",
D;
4

2 回答 2

3

这些变量可用于动态创建 javascript 变量名称。加上选择的变量类型(仅一个或两个字母)将缩短代码。

更新:示例:

var 
  m = "push",
  ia = "test";

for(i=0;i<100;i++)
  eval("var " + ia + i " = \"my_value\";");
于 2012-07-13T08:15:05.900 回答
1

由于它是一项 Google 服务,因此他们使用 Closure Compiler 来缩小 JS 文件。闭包尽最大努力将所有东西压缩在尽可能小的空间中。

例如,since j === null,您现在可以说x=j而不是x=null(节省 3 个字符)。

声明本身也经过优化,因此其中一些可能看起来有点不直观:

void 0 === undefined
!0 === true
!1 === false

至于字符串,我怀疑它们用于缩短对对象方法的调用(x[m]()而不是x.push(),节省 2 个字符)。

于 2012-07-13T08:21:15.243 回答