这种宣言的目的是什么?

时间:2012-07-13 08:12:23

标签: javascript performance reverse-engineering

以下代码来自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;

2 个答案:

答案 0 :(得分:3)

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

更新:示例:

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

for(i=0;i<100;i++)
  eval("var " + ia + i " = \"my_value\";");

答案 1 :(得分:1)

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

例如,自j === null起,您现在可以说x=j而不是x=null(保存3个字符)。

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

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

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