自产生程序

自产生程序(Quine)指的是不接受任何输入,也不直接读取源码,输出结果为自身源码的程序。各语言都有其实现,下面介绍 JavaScript 的一个例子。

以下面一个函数为例。

function foo() { console.log('foo'); }

我们可以通过调用其 toString 方法来获得其源码。

foo.toString()

所以可以改造一下函数 foo,如下所示:

function foo() { console.log(foo.toString()); }

此时,我们只是声明了一个函数,仍然需要手动执行触发。所以我们可以通过 IIFE 来改进。

(function foo() { console.log(foo.toString()); })()

执行以上代码,得到的结果如下:

function foo() { console.log(foo.toString()); }

和源码比较,缺少了引入 IIFE 后增加了括号。所以进一步完善如下:

(function foo() { console.log('(' + String(foo) + ')()'); })()

此时的输出和源码相等。

参考

Table of Contents