摘要:一言不合,翠花,上酸菜随便写个函数哈你猜会怎么输出哦,这是为什么呢奥,这个嘛,就是说的块级作用域问题下面开始回归正题其实你这样写,结果也是一样留空太暴力了,也是来看看跟闭包结合大法其实,搞了半天,有个更吊炸天的技能,都没想告诉你,知道为什么
一言不合,
翠花,
上酸菜!
//随便写个函数哈 var arr=[]; for(var i=0;i<3;i++){ arr[i]=function(){ return i; } } //你猜会怎么输出 console.log(arr[0]());//3 console.log(arr[1]());//3 console.log(arr[3]());//3
哦,这是为什么呢?
奥,这个嘛,就是说的块级作用域问题
下面开始回归正题:
其实你这样写,结果也是一样:
var arr=[]; for(var i=0;i<3;i++){ //留空 } console.log(i)//太暴力了,也是3!
来看看IIFE跟闭包结合大法:
var arr=[]; for(var i=0;i<3;i++){ (function(i){ arr[i].function(i){ return i; } })(i); } console.log(arr[0]());//0 console.log(arr[1]());//1 console.log(arr[2]());//2
其实,搞了半天,有个更吊炸天的技能,
都没想告诉你,知道为什么那么多人喜欢ES6,
因为真的非常666:
var arr=[]; for(let i=0;i<3;i++){ arr[i]=function(){ return i; } } //This is a Amazing world! console.log(arr[0]());//0 console.log(arr[1]());//1 console.log(arr[2]());//2
var 要哭了,真的,怎么可以这样,
卑鄙!下流!无耻!打码
...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/103878.html
摘要:尽可能的使用局部变量,少用全局变量。正确的实现就是在函数体内部使用将声明成局部变量。在新特性中,引入了块级作用域这个概念,因此还可以使用,来声明局部变量。它们共享外部变量,并且闭包还可以更新的值。 变量作用域 作用域,对于JavaScript语言来说无处不在,变量作用域,函数作用域(运行时上下文和定义时上下文),作用域污染等等都跟作用域息息相关,掌握JavaScript作用于规则,可以...
摘要:匿名函数是不能单独写的,所以就提不上立即执行了。六立即执行函数在闭包中的应用立即执行函数能配合闭包保存状态。来看下上节内容中闭包的例子现在,我们来利用立即执行函数来简化它第一个匿名函数执行完毕后,返回了第二个匿名函数。 前面的闭包中,提到与闭包相似的立即执行函数,感觉两者还是比较容易弄混吧,严格来说(因为犀牛书和高程对闭包的定义不同),立即执行函数并不属于闭包,它不满足闭包的三个条件。...
摘要:闭包在我理解是一种比较抽象的东西。所以我写了一篇博文来方便自己理解闭包。那么现在我们可以解释一下闭包的第一个定义在计算机科学中,闭包是引用了自由变量的函数。循环中创建闭包在我们使用的关键字之前,闭包的一个常见问题就出现在循环中创建闭包。 零. 前言 从我开始接触前端时就听说过闭包,但是一直不理解闭包究竟是什么。上网看了各种博客,大家对闭包的说法不一。闭包在我理解是一种比较抽象的东西。所...
摘要:词法作用域的查找规则是闭包的一部分。因此的确同闭包息息相关,即使本身并不会真的使用闭包。而上面的创建一个闭包,本质上这是将一个块转换成一个可以被关闭的作用域。结合块级作用域与闭包模块这个模式在中被称为模块。 你不知道的JS(上卷)笔记 你不知道的 JavaScript JavaScript 既是一门充满吸引力、简单易用的语言,又是一门具有许多复杂微妙技术的语言,即使是经验丰富的 Jav...
阅读 2435·2023-04-25 21:26
阅读 1479·2021-11-25 09:43
阅读 1888·2019-08-30 15:52
阅读 903·2019-08-30 14:05
阅读 2587·2019-08-29 16:10
阅读 376·2019-08-29 13:48
阅读 1826·2019-08-29 12:47
阅读 1240·2019-08-23 18:04