(function(){var k=[];return function j(){k.push(i);j();}})()();

这就是上周我在胳膊上刺的字。人们对这个纹身的反应先是不敢相信,后是觉得好笑,但我喜欢它。

为什么我会决定要让这样一段让人费解的JavaScript代码在我余下的一生中伴随在我的身体上?是这样,我想要一个只对我自己有意义的纹身。我想要一个跟我的工作和兴趣有关的纹身:Web开发相关的。我希望这个纹身是与众不同的。

我简单的在Google上查了一下“程序员纹身”和“开发者纹身”,希望能得到一点灵感,但唯一能找到的是你肯定见到过的</head> <body> 图案(很妙的纹身):

head-body-纹身

在互联网上一无所获后,我想到,与其找什么东西来表现我对编程的喜爱,不如直接用代码来表现我的思想。

所用的语言很显然应该是JavaScript。它是我使用时间最长的语言。JavaScript也是web开发的核心基础,就目前的开发趋势来看,这种现状在短时期内也不会有任何改变。还有,它是一个开放的标准,我坚信,整个互联网也都该这样。

那么,我用代码表现些什么呢?我想,这种代码应该是能提醒我在每天工作中、生活中都努力追求的一种什么样价值和态度的代码。

(function(){var k=[];return function j(){k.push(i);j();}})()();

这种代码结构被称作闭包(closure)。如果你不知道闭包是什么,这里有个资料你可以阅读一下:什么是闭包。简单说:它是一个能返回另一个函数的函数。被返回的函数里可以访问到其父函数的有效变量访问范围内的所有变量——就像是面向对象语言,例如C#或Java,里的私有内部类。我决定采用这种结构体有两个原因:首先,我感觉这个东西非常的漂亮,第二,我希望这种编码方式能被更多的接受、更多的使用。

(function(){var k=[];return function j(){k.push(i);j();}})()();

这个 数组k 代表知识和经验。

(function(){var k=[];return function j(){k.push(i);j();}})()();

闭包返回的函数 j 是递归调用的。这用来提醒我,我需要保持我的动力和干劲——我应该不断的追求。

(function(){var k=[];return function j(){k.push(i);j();}})()();

每一次的调用,函数 j 就会把全局变量 i 里的内容添加到内部的数组 k 里。眼尖的人会发现,这段代码没有做异常检查,如果变量 i 没有定义,这段代码会报错,递归函数 j 将运行不下去。这是故意的。变量 i 表示来自其他人的输入,我要提醒自己,应该不断的向周围的人寻求建议和忠告。我知道我不能在与世隔绝中成长,因此,不从他人那里收集经验将会带来灾难的后果。正如我上面提到的,数组k 表示知识和经验,这部分代码还让我记住,我要不断的从获得的输入信息中学到东西。这并不是说我必须要接受和采纳所有收到的建议,我需要的是从中学到东西。即使不可用的建议也能让我们从忠告者身上学到很多事情。

(function(){var k=[];return function j(){k.push(i);j();}})()();

闭包和返回的函数 j 都是自我调用的。这表示,代码会自我驱动运行:函数并不一定需要别人来驱动。这是在提醒我,在工作和生活中,我应该主动行动,不要依赖由外界压力的影响才去做新的事情。

于是,这个纹身就诞生了。每次看见我的胳膊,都会让我想起它赋予的对我、对编程有重要意义的涵义。

我的纹身


原文评论:

Jruv:很有创意,就是纹的字体太难看了 - 2011年10月10日1:54 上午回复

随卡卡:有点不低调。 - 2011年10月10日8:43 上午回复

metalupmyballs:手表系的这么紧不难受么。。? - 2011年10月10日11:41 上午回复

ww:闭包不是什么值得推荐的好方法,他也许过几年会后悔的 :) - 2011年10月14日9:57 上午回复

Darcy Yang:Good~ 很有创意。第一次没看到这个i ,一看解说,原来如此。 - 2011年10月28日3:35 下午回复


转自:http://www.aqee.net/what-you-tattooed-code-on-your-arm/

[本文英文原文链接:What? You tattooed code on your arm? ]