0

このマトリックスをHNで600バイト未満で見たところです

完全なソースは次のとおりです。

<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(左側)の割り当てではありませんか?

4

2 に答える 2

6

そうです、識別子は数字で始めることはできません。よく見ると、9はに置き換えられてい;q.getContext('2d').fillます。

ループは、変数を設定し、p2561秒を含む配列を作成する際に分解されました。

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
})
于 2013-03-17T13:20:00.397 に答える
1

数字で始まりません。分割されるのは文字列だけです。

'9Style ....'.split(9).join(...

于 2013-03-17T13:20:29.380 に答える