闭包实例
Posted pfcan66
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包实例相关的知识,希望对你有一定的参考价值。
1,我们先来看一段代码,你认为会输出什么呢?
var arr=[]; for(var i=0;i<=2;i++){ arr[i]=function(){ return i*2; } } console.log([arr[0](),arr[1](),arr[2]()]);
如果你以为会输出[0,2,4],那你就错了,这里会输出[6,6,6],因为在js里,因为在执行arr方法时,此时的i已经变成3了,那么我们的方法可以有自己的变量,而不是用全局的i变量呢,这里就要用到闭包了
2,再看看以下代码,这时候会输出什么呢?
var arr=[]; for(var i=0;i<=2;i++){ (function(j){ arr[j]=function(){ return j*2; } })(i); }
console.log([arr[0](),arr[1](),arr[2]()]);
对,这个时候会输出你想要的[0,2,4],for循环的自调函数就形成了一个闭包,使arr数组的每个方法都有自己的局部变量j,不会受外界影响
3,不过现在有es6了,我们不须要那么麻烦自已去闭包来保存我们想要的值了,直接用let申明变量就可以实现
const arr=[]; for(let i=0;i<=2;i++){ arr[i]=function(){ return i*2; } } console.log([arr[0](),arr[1](),arr[2]()]);
打出来自己运行看看吧,哈哈,es6,是不是非常666
以上是关于闭包实例的主要内容,如果未能解决你的问题,请参考以下文章
Swift之深入解析Sendable和@Sendable闭包代码实例
Swift之深入解析Sendable和@Sendable闭包代码实例