垃圾回收站

December 4, 2007

困扰80后御宅族的十大烦恼之症状

[ 分类: 社会 ] 由 弗里曼·潘 发表于 4:22 am 评论( 0 )

以下80后御宅族十大烦恼的症候特征,,一般80后都占了三五条,一个80后的朋友更惊呼自己几乎一条不少全占了–

1.成天泡在网上,又不知道做什么好。80后最常说的一句话是”无聊”,尽管他们在网络上聊天花去了大把的时间。
建议:聊天作为一种基本交流方式,所要达到的目的是获得认同。网上聊天很难达到这种认同,所以越聊越无聊。学习和工作累了,玩一玩游戏没错,但是打怪练级那些游戏基本上是得不偿失的,费时间,伤身体,还花钱。可以玩一玩趣味性强的休闲游戏,比如《纸客帝国》之类,轻松幽默,带点无厘头的风格,很能消除疲劳。靠玩游戏来交流感情是不现实的,要交流感情最好还是找个人去咖啡吧,或者堡个电话粥吧。

2.浮躁,好预测未知妄下定论。对看过的电影和电视剧,会按耐不住向别人透露下一个情节或者结局。对不了解的事物,根 据一丁点信息发表长篇大论的见解,并且多半是批判的。对权威毫无理由的不耐烦,但绝不公开挑战,只热衷于影响身边的几个人,并有得到认同的强烈欲望。一旦 不能如愿,就不再发言,部分人会暴跳如雷,令旁人费解。
建议:多出去旅行,多读书,多参加团体活动,多接触社会。世界的绝大部分真相在我们的视野之外,浮躁是个人修养浅薄的表现,人既是社会成员也是自然的组成部分,需要积淀对世界尽可能的多认识,才能达到意识的足够高度,才能让人看起来不那么浮躁。

3.瘦弱,不爱运动。对健壮的人心存嘲讽,对肌肉和力量心存恐惧。在审美上受日式漫画的影响,崇尚中性美和病态美。与 第一点有一定关系,在身体的耐力、韧性和爆发力上,更热衷于后者。但是在受到刺激之后,又会表现出病态的固执。这样就表现为两个极端,一方面弱不禁风,另 一方面又偶尔会有惊人之举。
建议:健身,多进行户外运动。身体是人最接近自然的组成部分,一个健康强壮不容易被击倒的身体可以让我们终生收益。

4.性格软弱,喜欢为自己的意志不坚定找理由。不喜欢通过沟通达到与外界的意见统一,而是表面妥协,内心强烈反感,表 现为通常所说的叛逆。性格软弱表现在与异性相处方面就是易犯花痴,对异性的正常关怀想入非非。在弄清楚是怎么回事之后,即使真的喜欢对方,也不敢大胆追 求,而是找个理由退缩。通常的理由是说自己不了解爱情,也不想了解。
建议:堂而皇之的与人打一架,正儿八经的谈一次恋爱。从自然法则的角度考虑的,作为雄性动物,与同性生物打架和向异性求爱都是走向成熟的标志。

5.消极,拒绝长大。不喜欢被人说成熟,尤其不能容忍被人说是老男人。不耐烦与长辈讨论一些实际的问题,反感政治,厌恶参加长辈在场的应酬。要负责任的事情,会让他们觉得焦虑不安和无奈。
建议:尝试了解父母的不易。也可以从哲学层面去了解索取和付出之间的辩证关系,就象课本里所说的权利和义务的关系。

6.选择性自闭,对熟人唠叨不休,对陌生人一言不发。偏爱使用方言或者网络语言等非大众语言。吸烟,但是不敬烟。喝酒,但是不敬酒。不是他们感兴趣的话题,基本上很难交谈下去。多人参与讨论时,如果没有人邀请他发言,即使他已酝酿好发言稿,还是会选择沉默。
建议:这些其实都是在沟通上遇到的困难。建议扩大知识面,扩大社交圈,改变与人交谈的方式,勇敢表达自己的见解,努力将自己的观点传达并影响其他人。获得认同后就会产生激励,反复几次,就可以走出自闭。

7.习惯熬夜,25岁之前通宵次数明显较多。有时候为了”合理安排时间”,干脆用通宵来减少熬夜次数。实际上下半夜都在打瞌睡。
建议:与第5点相同,熬夜其实就是自闭在作怪。有熬夜习惯的人,白天就找到了关门睡觉的理由,避免了外界的骚扰。或者白天虽然没有在家睡觉,因为精神上萎靡不振,能造成”外界不关我事”的错觉,也能达到抵制外界骚扰的目的。建议立刻改变作息时间,打开心扉。

8.毫无理由的高傲。觉得别人不可能了解自己,并以此作为对别人不屑的理由。不愿意听别人的建议,也听不进。这种高傲连他们自己都不知道为什么。
建议:由于时代因素,80后的自尊更为脆弱,从心理上就更趋向于自我保护,表现为对外界不信任。建议多了解一些社会规则,不管在什么场合,只要你在规则之内,你就是安全的,可以自由表达自己的存在价值。

9.做事不按计划,讨厌按部就班,永远不知道钱花到哪里去了。以同时看多部小说,守多部漫画为荣。喜欢同时着手几件事,忙得焦头烂额是他们喜欢的状态,尽管这些事情只要合理安排是完全可以按部就班轻松完成的。
建议:欲速则不达这个道理就不用说了吧。学会制定计划,可以避免紧急情况下全面崩盘的风险。

10.不问问题,相信百度和谷歌的权威,多数人喜欢用搜索引擎思考,将搜索引擎作为自己的智囊。
建议:互联网确实给了我们许多方便,但是互联网上的东西很多都是未经考证,经不起推敲的。所以要避免犯错,这个地方正需要80后拿出怀疑精神来,不能依赖互联网而使自身的学习功能退化了。


December 3, 2007

在Javascript中,什么是闭包(Closure)

[ 分类: Javascript ] 由 弗里曼·潘 发表于 8:39 pm 评论( 0 )

闭包的两个特点:

1、作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态。

2、一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

例1。

<scripttype=”text/javascript”>

functionsayHello2(name){

vartext=’Hello’+name;//localvariable

varsayAlert=function(){alert(text);}

returnsayAlert;

}

varsy=sayHello2(’never-online’);

sy();

</script>

作为一个Javascript程序员,应该明白上面的代码就是一个函数的引用。如果你还不明白或者不清楚的话,请先了解一些基本的知识,我这里不再叙述。

上面的代码为什么是一个闭包?

因为sayHello2函数里有一个内嵌匿名函数

sayAlert = function(){ alert(text); }

在Javascript里。如果你创建了一个内嵌函数(如上例),也就是创建了一个闭包。

在C或者其它的主流语言中,当一个函数返回后,所有的局部变量将不可访问,因为它们所在的栈已经被消毁。但在Javascript里,如果你声明了一个内嵌函数,局部变量将在函数返回后依然可访问。比如上例中的变量sy,就是引用内嵌函数中的匿名函数function(){ alert(text); },可以把上例改成这样:

<scripttype=”text/javascript”>

functionsayHello2(name){

vartext=’Hello’+name;//localvariable

varsayAlert=function(){alert(text);}

returnsayAlert;

}

varsy=sayHello2(’never-online’);

alert(sy.toString());

</script>

这里也就与闭包的第二个特点相吻合。

例2。

<scripttype=”text/javascript”>

functionsay667(){

//Localvariablethatendsupwithinclosure

varnum=666;

varsayAlert=function(){alert(num);}

num++;

returnsayAlert;

}

varsy=say667();

sy();

alert(sy.toString());

</script>

上面的代码中,匿名变量function() { alert(num); }中的num,并不是被拷贝,而是继续引用外函数定义的局部变量–num中的值,直到外函数say667()返回。

例3。

<scripttype=”text/javascript”>

functionsetupSomeGlobals(){

//Localvariablethatendsupwithinclosure

varnum=666;

//Storesomereferencestofunctionsasglobalvariables

gAlertNumber=function(){alert(num);}

gIncreaseNumber=function(){num++;}

gSetNumber=function(x){num=x;}

}

</script>

<buttononclick=”setupSomeGlobals()”>生成-setupSomeGlobals()</button>

<buttononclick=”gAlertNumber()”>输出值-gAlertNumber()</button>

<buttononclick=”gIncreaseNumber()”>增加-gIncreaseNumber()</button>

<buttononclick=”gSetNumber(5)”>赋值5-gSetNumber(5)</button>

上例中,gAlertNumber, gIncreaseNumber, gSetNumber都是同一个闭包的引用,setupSomeGlobals(),因为他们声明都是通过同一个全局调用–setupSomeGlobals()。

你可以通过”生成”,”增加”,”赋值”,”输出值”这三个按扭来查看输出结果。如果你点击”生成”按钮,将创建一个新闭包。也就会重写gAlertNumber(), gIncreaseNumber(), gSetNumber(5)这三个函数。

如果理解以上代码后,看下面的例子:

例4。

<scripttype=”text/javascript”>

functionbuildList(list){

varresult=[];

for(vari=0;i<list.length;i++){

varitem=’item’+list[i];

result.push(function(){alert(item+”+list[i])});

}

returnresult;

}

functiontestList(){

varfnlist=buildList([1,2,3]);

//usingjonlytohelppreventconfusion-couldusei

for(varj=0;j<fnlist.length;j++){

fnlist[j]();

}

}

testList();

</script>

运行结果:

item3isundefined

item3isundefined

item3isundefined

代码result.push(function(){alert(item+”+list[i])}),

使result数组添加了三个匿名函数的引用。这句代码也可以写成

varp=function(){alert(item+”+list[i])};

result.push(p);

关于为什么会输出三次都是 “item 3 is undefined”

在上面的例子say667()例子中已经解释过了。

匿名函数function() {alert(item + ‘ ‘ + list[i])}中的list[i]并不是经过拷贝,而是对参数list的一个引用。直到函数buildList()返回为止,也就是说,返回最后一个引用。即遍历完list(注:list的最大下标应该是2)后,经过i++也就变成了3,这也就是为什么是item 3,而list[3]本身是没有初始化的,自然也就是undefined了。

在这最后一个例子中,展示如何声明两个不同的闭包。

例5。

function newClosure(someNum, someRef) {
// Local variables that end up within closure
var num = someNum;
var anArray = [1,2,3];
var ref = someRef;
return function(x) {
num = x;
anArray.push(num);
alert(’num:’ + num + ‘\nanArray:’ +anArray.toString()+ ‘\nref.someVar:’ + ref.someVar);
}
}
var closure1 = newClosure(40, {someVar:’ never-online’});
var closure2 = newClosure(99, {someVar:’ BlueDestiny’});
alert(closure1);
alert(closure2);
closure1(4);
closure2(3);

输出结果为:

num:4
anArray:1,2,3,4
ref.someVar:never-online

num:3
anArray:1,2,3,3
ref.someVar:BlueDestiny