挑战百日学习计划(南宁小程序开发)第20天(javascript 闭包)

由于公司最近接单有点忙,所以就没来得及更新,很多公司找上门来谈【南宁小程序开发 www.zkelm.com】 ,熬夜写了三天的方案书,今晚才有点空更新
在这里插入图片描述
闭包的作用,阻止变量污染,

1.不通过var 声明的变量 属于全局变量,即使他在函数内部,
2.在函数内部用 var 声明的变量属于函数的私有变量,外部无法访问
3.函数可以访问全局变量(函数以外的)

生命周期:全局变量 只有在网页关闭才会销毁,而局部变量在函数运行完毕就会销毁

我是这么理解闭包的

var myfun=function(){
   var counter=1;
   return counter;   
}

你用浏览器console 输入

在这里插入图片描述

其中 myfun 的值是一串 js的代码

当年输出 myfun() 则会允许这段代码输出结果
在这里插入图片描述
现在我们把代码改成

var myfun=function(){
   var counter=0;
   return counter;
 }()

重点在这里:myfun 会存储在变量中,直到网页关闭, 同时 myfun 里面的 var counter 这个变量也会同时存在变量中不释放

所以现在我们只需要构造一个 方法可以操作counter的值即可对counter的值进行修改,同时也保护了counter 可以在全局上进行访问。

var myfun=function(){
   var counter=0;
   return function(){
      counter++
      return counter;
    }
}()

现在我们console 看一下 myfun 是什么内容
在这里插入图片描述

由此可以看出, myfun 直接返回了一个为执行的函数 ,而且 因为

myfun 这个变量的存在内存中, 导致 counter 没法销毁, 所以 存在初始值 counter =0

现在我们运行一下 这个函数看看有什么效果
输入 myfun()
输出结果:1
在运行一次 myfun()
输出结果:2
在运行一次 myfun()
输出结果:3

在这里插入图片描述

出现一个问题: counter++ 不能等于 counter+=1

counter++ 第一次运行的时候是0
counter+=1 第一次运行的时候是1

看来js的语法太混乱真是给开发人员如IE6一样的烦恼

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值