1

所以在这个问题中,我询问了一些 Javascript 是如何被压缩的。这个问题得到了回答,但下面的片段让我非常困惑,以至于我不得不问另一个问题。这里是:

for (Y = 0; $ = 'zxqj`_^ZWVUQONMKJIHGCA@8$  ' [Y++];) 
     with(_.split($)) _ = join(pop());
eval(_) 

这种语法从何而来?我有点理解操作的第三个是([Y++]),但为什么它在括号中,为什么它之前没有任何分号?另外,在第 2 行:在我看来_是一个正在声明的变量,但是什么样的变量类型是with(_.split($))

4

1 回答 1

2

任何for命令都可以分解。从“经典”循环开始:

for( i=0; i<end; i++)

这转化为:

  • i=0
  • 只要重复以下操作i<end
    • 运行块中的代码
    • 增量i

因此,将其应用于您的代码:

  • Y=0
  • 只要字符串位置 Y 的字符存在(即 Y 不超过字符串的长度),将该字符分配给$然后递增 Y,然后:
    • 运行块中的代码
    • 什么都不做(第二个分号后什么都没有)

它很丑陋,但如果你把它分解,它仍然是有意义的。

于 2013-04-05T13:34:31.940 回答