《JavaScript百炼成仙》续集01,web中间件开发

听罢,黑衣人一惊,这些丹药是今天大长老给的,价值自然不凡。不过他自己的地位也很不一眼,区区几个丹药而已,没啥大不了的。

“好,丹药可以送,但是假如是我赢了,你就必须告诉我你的秘密!” 黑衣人毫不犹豫地答应了。

“好吧,你出题吧!” 叶小凡又看了一眼丹药,心情大好,因为他知道,这些丹药要不了多久就是自己的了。

“哼,我最看不惯的就是你这种随意的态度!”黑衣人感觉自己被轻视了,咬着牙说到。

“现在,你看好,我的储物袋里有五个丹药,我用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 的值就变成了5,所以get函数里面的i永远都是5!”

“嗯,这个代码其实相当于这样。”

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的语法。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

结尾

学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

html5

多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

html5

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值