我刚看到this matrix on HN in less than 600 bytes
以下是完整的资料来源:
<body style=margin:0 onload="for(s=window.screen,w=q.width=s.width,
h=q.height=s.height,m=Math.random,p=[],i=0;i<256;p[i++]=1);
setInterval('9Style=\'rgba(0,0,0,.05)\'9Rect(0,0,w,h)9Style=\'#0F0\';
p.map(function(v,i){9Text(String.fromCharCode(3e4+m()*33),i*10,v);
p[i]=v>758+m()*1e4?0:v+10})'.split(9).join(';q.getContext(\'2d\').fill'),33)">
<canvas id=q>
我的问题是变量的赋值如何以数字开头:setInterval('9Style=\'rgba(0,0,0,.05...)
我认为js变量不能以数字开头。
这不应该是无效的lhs(左手边)分配吗?
答案 0 :(得分:6)
你是对的,标识符不能以数字开头。如果您仔细观察,9
将替换为;q.getContext('2d').fill
。
循环在设置变量时分解,并创建一个包含256 p
s的数组1
:
s = window.screen,
w = q.width = s.width,
h = q.height = s.height,
m = Math.random,
p = [];
for (i = 0; i < 256; p[i++] = 1);
余数:
setInterval(
'9Style=\'rgba(0,0,0,.05)\'9Rect(0,0,w,h)9Style=\'#0F0\';p.map(function(v,i){9Text(String.fromCharCode(3e4+m()*33),i*10,v);p[i]=v>758+m()*1e4?0:v+10})'
.split(9).join(';q.getContext(\'2d\').fill')
, 33)
这变为:
setInterval(";q.getContext('2d').fillStyle='rgba(0,0,0,.05)';q.getContext('2d').fillRect(0,0,w,h);q.getContext('2d').fillStyle='#0F0';p.map(function(v,i){;q.getContext('2d').fillText(String.fromCharCode(3e4+m()*33),i*10,v);p[i]=v>758+m()*1e4?0:v+10})", 33);
将此代码放在http://jsbeautifier.org/中会给出:
;
q.getContext('2d').fillStyle = 'rgba(0,0,0,.05)';
q.getContext('2d').fillRect(0, 0, w, h);
q.getContext('2d').fillStyle = '#0F0';
p.map(function (v, i) {;
q.getContext('2d').fillText(String.fromCharCode(3e4 + m() * 33), i * 10, v);
p[i] = v > 758 + m() * 1e4 ? 0 : v + 10
})
答案 1 :(得分:1)
它不以数字开头。它只是一个字符串,是分开的:
'9Style ....'.split(9).join(...