返回

JavaScript 中的 Quine

Quine:一个能够打印自己源代码的程序

你可以试试执行以下

!function $(){console.log('!'+$+'()')}()

为什么起作用?上面的代码使用了一些技巧。

获取源代码最简单的方式是使用String

function foo() { return "abc" }
String(foo)

// function foo() { return "abc" }

所以我们第一个版本 可以是这样

function $() { console.log(String($)) } ,但是我们需要再执行 $() 才可以。 所以我我们使用IIFE继续进行改造。

!function $() { console.log(String($)) }()

//function $() { console.log(String($)) }
//true (!undefined的结果为true)

最后加上感叹号即可。

看看下面这个,意思也一样((((function $(){console.log('(((('+$+'()))))')}()))))

更多有意思的例子:

  • (function _(){return'('+_+')()'})()
  • f=_=>`f=${f};f()`;f()

参考文章:

http://rosettacode.org/wiki/Quine#JavaScript https://2ality.com/2012/09/javascript-quine.html

Licensed under CC BY-NC-SA 4.0