这一日夜晚,月光皎洁,洒洒地落在青山院西南边的一座小山上。这座小山大约是没有具体的名字,可既然靠着青山院,大家都愿意就叫它青山。
这时候,青山上一隅闪过一个身手矫健的人影,正是刚刚吐纳完毕的叶小凡。得到红衣底子的身份后,叶小凡一时风光无两,但是修道之人,切不可因为一时的名利而沾沾自喜,这是平时叶老对自己的教导。
所以,叶小凡更喜欢独自一人来到青山上修炼。
“哎呀,又是充实的一天啊。”叶小凡猛地吸了一口夜晚的凉气,脸蛋也显现出健康的红色。
炼气期巅峰!
这正是叶小凡当前的修为,可是这个境界只有他一个人知道,虽说这个境界也还可以,可是叶小凡却怎么也高兴不起来。
要知道,炼气期巅峰在所有的红衣弟子中,是最低的境界了。上次基础考核遇到的林涛师兄,现在据说已经到了筑基后期。可是,叶小凡自己也不知道怎么回事,怎么也无法突破炼气期。
炼气期,准确来说,都无法算是一个境界。那是修道之人必须经历的一个阶段,而唯有踏入筑基,哪怕是最差的人道筑基,才算是真正踏入了修真的道路。
“叶老,你说我究竟是怎么回事,为什么迟迟都无法进入筑基期呢?”叶小凡郁闷道。
“你这种情况确实特殊,在我那个年代,也未曾遇到过。”戒指中的叶老也啧啧称奇,按理说,叶小凡的修为肯定是远远不止炼气期的。毕竟,有自己的悉心指导,再加上叶小凡天资聪慧,绝无可能卡在炼气期,无法再进一步!
“嗯?” 突然,叶小凡丹田一热,感应到了什么。一股能量从丹田处涌了上来,于是叶小凡立刻盘膝而坐,他知道,又要突破了。
大约过了一刻钟,能量值升至最大,叶小凡额头微微冒汗,大喝一声,一阵白光闪过。
叶小凡又突破了!
“嗯?我现在已经到了炼气期99层了!” 叶小凡凝视自己的内存远海,惊讶道,可随即又是一阵失落感。
“哎呀,叶老,你看我都炼气期99层了,难道真要达到炼气期100层才能突破进入筑基期吗?”
“小娃娃,你莫要着急,别忘了我平时是怎么教导你的。修真之途,切勿急躁!你这体质可能确实特殊,但这也是好事,毕竟你现在的修为是实打实的。就连老夫也没有见过,还有谁能到炼气期99层还不突破的。”
叶小凡嗯了一声,平复了一下心态。
就在这时,迎面来了一个黑衣人,拦住了叶小凡。
“又来?”叶小凡看见黑衣人,并不紧张,因为这不是第一次了。最近这个黑衣人总是突然出现,挑战自己。
“叶小凡,我已掌握闭包的精华, 这次,你,赢不了我!” 黑衣人自信满满,随即就扔出一个储物袋。
var storageBag = {}
储物袋一开,发现里面出现五颗丹药。
var storageBag = {} for (var i = 0; i < 5; i++) { storageBag['elixir' + i] = '丹药' + i; } console.log(storageBag);
图1-1
打印效果如图1-1所示。
"嗯?"叶小凡看到丹药,因为在叶老的教导下,叶小凡的丹道境界已经到了宗师境界,一眼就看出这丹药的品阶不低!
“这个人到底是什么来头,这些丹药都价值不菲啊!”
于是,叶小凡微微一笑,说到:“这位同门,不管这次比什么,假如又是我胜了,这些丹药你送我如何?”
听罢,黑衣人一惊,这些丹药是今天大长老给的,价值自然不凡。不过他自己的地位也很不一眼,区区几个丹药而已,没啥大不了的。
“好,丹药可以送,但是假如是我赢了,你就必须告诉我你的秘密!” 黑衣人毫不犹豫地答应了。
“好吧,你出题吧!” 叶小凡又看了一眼丹药,心情大好,因为他知道,这些丹药要不了多久就是自己的了。
“哼,我最看不惯的就是你这种随意地态度!”黑衣人感觉自己被轻视了,咬着牙说到。
“现在,你看好,我的储物袋里有五个丹药,我用for循环修改一下代码,给每一个丹药套一层,如果你想要拿到丹药,就得使用get方法。”
var storageBag = {} for (var i = 0; i < 5; i++) { storageBag['elixir' + i] = { get: function(){ return 'elixir' + i } }; } console.log(storageBag);
“你说,这样的get函数可以得到每个具体的丹药吗?”黑衣人自信满满地对叶小凡说到。
“当然不行,这样做的话,get函数的返回值都是第5个丹药啦。”叶小凡,看了一眼,想也不想地说到。
听完,黑衣人一惊,本来自己好像借此好好羞辱叶小凡一番,没想到直接就被叶小凡看出来了!
“哼,别高兴得太早,不错,因为var会进行变量提升,for循环执行结束后,i 的值就变成了4,所以get函数里面的i永远都是4!”
“嗯,这个代码其实相当于这样。”
var i; for (i = 0; i < 5; i++) { storageBag['elixir' + i] = { get: function(){ return 'elixir' + i } }; }
i 因为是var定义的,所以会自动提升到全局作用域,一旦 i 的值发生变化,其他任何地方的 i 都会变化!
验证:
图1-2
“哼,我刚彻底学会JS闭包大法,现在我就来解决这个问题!” 说着,自信满满的黑衣人就开始运功,一道道代码流被打出来,行云流水。
var i; for (i = 0; i < 5; i++) { /** 专门定义一个闭包函数 * */ var closure = function(i){ /** 用来锁住外面的变量i * */ var lock = i; /** 返回一个函数,让i变量的生命周期得以延续 * */ return function(){ return 'elixir' + lock; } } storageBag['elixir' + i] = { /** 用()执行clousure函数,返回带有lock的函数 * */ get: closure(i) }; }
"怎么用,叶小凡,这就是闭包的巅峰应用!你能写出比这更完美的代码嘛?"黑衣人说完,就运行了代码
图1-3
果不其然,因为用closure 函数,形成了一个闭包,循环遍历的 i 变量就被锁住了!黑衣人的气息一下子暴涨起来,对叶小凡形成威压!
筑基期后期!
黑衣人正是太上长老的长孙,罗丹!
现在的他,已经到了筑基期后期。之前的外门小比,看到叶小凡竟然会闭包,身为门派内定继承人的他,无法接受。
今天,一定要找回场子,还要扒出叶小凡进步这么快的秘密!
叶小凡感受到来自罗丹的威压,却没有受到丝毫的影响。
“这人竟有筑基后期的修为,哎,又是筑基期,真是令人羡慕啊。”叶小凡感慨一声,随后,用右手的食指轻轻一点。
一股真气朝着那些代码直冲而去,随后,代码发生变化,在原始版本上,叶小凡只改动了一处地方。
for (let i = 0; i < 5; i++) { storageBag['elixir' + i] = { /** 用()执行clousure函数,返回带有lock的函数 * */ get: function(){ return 'elixir' + i; } }; }
叶小凡仅仅是把var i 改成了let i 而已。ES6推荐使用let定义变量,这样就可以实现块级作用域的效果了,内部的变量不会影响全局。在这个例子中,因为for循环中的i用let定义了,那么i的作用域就只在函数体内,不会发生变量提升的情况。
图1-4
效果和用闭包是一样的,但是少了很多的代码!
let强者,竟恐怖如斯!
“这是......ES6的语法!”罗丹不可置信地看着叶小凡。
要知道,能使用ES6的语法,那最起码得有金丹期的境界!而罗丹作为筑基期的巅峰,在千鹤派的年轻一代中,已是翘楚,是天骄。但是,罗丹依然无法使用ES6的语法。
这个叶小凡,可恨!他到底是用了什么办法,他的气息,明明只有炼气期啊!
罗丹内心狂吼,脸上却没有太多的脸色变化。但是他知道,自己又败了。
“我输了,叶小凡,下一次,我必定胜你!”说完,罗丹头也不回地就准备离开。
“”哎哎,这位同门,你的丹药还没送我呢!”叶小凡看罗丹要走,急忙喊道。
罗丹愣了一下,看了下储物袋里面的五颗丹药,这是太上长老今天特意给自己的,说后面会用到,要好好保存。其实罗丹自己也不知道这些丹药的价值是多少。
可是,既然话说出去了,不给的话面子上又挂不住。于是,罗丹连着储物袋朝叶小凡一扔,然后立刻化作一道灵光飞去。
这个地方,他是一刻也不想多待。
本文有帮助的话,点赞+评论+转发吧。
谢谢支持哟(*^▽^*)