Java教程

《JavaScript百炼成仙》续集01节 let强者,竟恐怖如斯

本文主要是介绍《JavaScript百炼成仙》续集01节 let强者,竟恐怖如斯,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

这一日夜晚,月光皎洁,洒洒地落在青山院西南边的一座小山上。这座小山大约是没有具体的名字,可既然靠着青山院,大家都愿意就叫它青山。

这时候,青山上一隅闪过一个身手矫健的人影,正是刚刚吐纳完毕的叶小凡。得到红衣底子的身份后,叶小凡一时风光无两,但是修道之人,切不可因为一时的名利而沾沾自喜,这是平时叶老对自己的教导。

所以,叶小凡更喜欢独自一人来到青山上修炼。

“哎呀,又是充实的一天啊。”叶小凡猛地吸了一口夜晚的凉气,脸蛋也显现出健康的红色。

炼气期巅峰!

这正是叶小凡当前的修为,可是这个境界只有他一个人知道,虽说这个境界也还可以,可是叶小凡却怎么也高兴不起来。

要知道,炼气期巅峰在所有的红衣弟子中,是最低的境界了。上次基础考核遇到的林涛师兄,现在据说已经到了筑基后期。可是,叶小凡自己也不知道怎么回事,怎么也无法突破炼气期。

炼气期,准确来说,都无法算是一个境界。那是修道之人必须经历的一个阶段,而唯有踏入筑基,哪怕是最差的人道筑基,才算是真正踏入了修真的道路。

“叶老,你说我究竟是怎么回事,为什么迟迟都无法进入筑基期呢?”叶小凡郁闷道。

“你这种情况确实特殊,在我那个年代,也未曾遇到过。”戒指中的叶老也啧啧称奇,按理说,叶小凡的修为肯定是远远不止炼气期的。毕竟,有自己的悉心指导,再加上叶小凡天资聪慧,绝无可能卡在炼气期,无法再进一步!

“嗯?” 突然,叶小凡丹田一热,感应到了什么。一股能量从丹田处涌了上来,于是叶小凡立刻盘膝而坐,他知道,又要突破了。

大约过了一刻钟,能量值升至最大,叶小凡额头微微冒汗,大喝一声,一阵白光闪过。

叶小凡又突破了!

“嗯?我现在已经到了炼气期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

打印效果如图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

图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

图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

图1-4

效果和用闭包是一样的,但是少了很多的代码!

let强者,竟恐怖如斯!

“这是......ES6的语法!”罗丹不可置信地看着叶小凡。

要知道,能使用ES6的语法,那最起码得有金丹期的境界!而罗丹作为筑基期的巅峰,在千鹤派的年轻一代中,已是翘楚,是天骄。但是,罗丹依然无法使用ES6的语法。

这个叶小凡,可恨!他到底是用了什么办法,他的气息,明明只有炼气期啊!

罗丹内心狂吼,脸上却没有太多的脸色变化。但是他知道,自己又败了。

“我输了,叶小凡,下一次,我必定胜你!”说完,罗丹头也不回地就准备离开。

“”哎哎,这位同门,你的丹药还没送我呢!”叶小凡看罗丹要走,急忙喊道。

罗丹愣了一下,看了下储物袋里面的五颗丹药,这是太上长老今天特意给自己的,说后面会用到,要好好保存。其实罗丹自己也不知道这些丹药的价值是多少。

可是,既然话说出去了,不给的话面子上又挂不住。于是,罗丹连着储物袋朝叶小凡一扔,然后立刻化作一道灵光飞去。

这个地方,他是一刻也不想多待。

本文有帮助的话,点赞+评论+转发吧。

谢谢支持哟(*^▽^*)

这篇关于《JavaScript百炼成仙》续集01节 let强者,竟恐怖如斯的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!