【发布时间】:2013-09-20 23:23:04
【问题描述】:
以下 JavaScript 是如何工作的?
我知道这是缩小的代码。我已经尝试对它进行一点去混淆,但我无法清楚地了解它是如何实现这种效果的。我可以看到它正在使用字符串进行某种迭代、使用 Date 对象、奇怪的字符串操作、数学函数,然后代码会自行打印。
如何用一个最小的例子重写相同的效果?
eval(z='p="<"+"pre>"/* ,.oq#+ ,._, */;for(y in n="zw24l6k\
4e3t4jnt4qj24xh2 x/* =<,m#F^ A W###q. */42kty24wrt413n243n\
9h243pdxt41csb yz/* #K q##H######Am */43iyb6k43pk7243nm\
r24".split(4)){/* dP cpq#q##########b, */for(a in t=pars\
eInt(n[y],36)+/* p##@###YG=[#######y */(e=x=r=[]))for\
(r=!r,i=0;t[a/* d#qg `*PWo##q#######D */]>i;i+=.05)wi\
th(Math)x-= /* aem1k.com Q###KWR#### W[ */.05,0>cos(o=\
new Date/1e3/* .Q#########Md#.###OP A@ , */+x/PI)&&(e[~\
~(32*sin(o)*/* , (W#####Xx######.P^ T % */sin(.5+y/7))\
+60] =-~ r);/* #y `^TqW####P###BP */for(x=0;122>\
x;)p+=" *#"/* b. OQ####x#K */[e[x++]+e[x++\
]]||(S=("eval"/* l `X#####D , */+"(z=\'"+z.spl\
it(B = "\\\\")./* G####B" # */join(B+B).split\
(Q="\'").join(B+Q/* VQBP` */)+Q+")//m1k")[x/2\
+61*y-1]).fontcolor/* TP */(/\\w/.test(S)&&"#\
03B");document.body.innerHTML=p+=B+"\\n"}setTimeout(z)')//
【问题讨论】:
-
很酷的动画...可能最终会在某个地方使用它!
-
哦,很好。没注意到小提琴。
-
这被称为Quine,这是我见过的最神奇的Quine之一。 en.wikipedia.org/wiki/Quine_(computing)
-
@Roko C. Buljan 我认为这是他的页面:aem1k.com
-
好像作者现在在 GitHub 上放了一个annotated version。
标签: javascript