闭包的理解,以及一些小例子

众所周知,闭包就是可以在一个函数中调用另一个函数的变量;我们怎么用闭包解决一些开发中用到的小问题;

我们先看一个小例子


这个例子的结果不管num[]中的数字是多少,它的结果都是4,在ES5中,没有块级作用域,只有函数作用域,所以for循环中生命的i是在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,所以结果都是4。我们在ES5中最常用的是闭包来解决全局i被覆盖的问题。

正如下面这样


这样打印出来的结果就是我们想要的结果,现在有一种更简便的方法,ES6提供了我们一种新的方法:let,let是在块级作用域内有效,这样每次循环就不会把这个结果覆盖掉,把上面的代码更改为下面的样子就可以了。


理解了闭包我们来做一个小实例

for(  var  i = 4; i -- ; ){

    setTimeout(function(){

        console.log(i);

    },i*150)

}

是不是感觉蒙了,只知道每个语法的应用,一合起来就不知道结果了,起始这道题的结果是4个-1。

接下来我们就来分析一下这道题:首先我们知道for循环的语句有三个,但是这个只有两个我们怎么判断它终止呢,其实在for循环中,当定义的变量小于零时,我们就终止循环。for的循环是3,2,1,0,当等于0时继续执行继续执行的i的值就变成了-1;

知道了这个结果,我们怎么改变这个函数得到我们希望得到的值呢,这就用到我们上面说的方法,利用闭包,或者ES6的方法,

得到的结果你是不是感觉是3,2,1,0呢,如果你以为是这样就错了,因为我们还有一个定时函数,i*150,这样我们的结果是:0,1,2,3。看了这个小练习你理解了吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值