找回密码
 立即注册

QQ登录

只需一步,快速开始

微信葡京娱乐网址号开发资源

关注:848

所属分类: 微信开发 微信葡京娱乐网址号开发资源

本版块为微信葡京娱乐网址号开发教程与葡京娱乐网址号开发相关技术分享板块,技术提问请到其他对应的问答板块发帖:)

[html5开发博客] js 闭包

[复制链接]
查看: 2331|回复: 8
最佳答案
0 

102

主题

112

帖子

4090

积分

S1

积分
4090
.闭包:
         全局变量:在程序任何位置都可访问(修改)
       问题:存在全局污染

  1.    //全局污染
  2.   var n=0;
  3.   function getNum(){
  4.        return ++n;
  5.   }
  6.   console.log(getNum());
  7.   console.log(getNum());
  8.     n=100;
  9.   console.log(getNum());
  10.   console.log(getNum());
复制葡京赌场网站
图片1.png
   
      局部变量:不可重用!
  1. //局部变量
  2. function getNum(){
  3. var n=0;
  4. return ++n;
  5. }
  6. console.log(getNum());
  7. console.log(getNum());
  8. n=100;
  9. console.log(getNum());
复制葡京赌场网站
图片2.png

     解决:即要重用变量,又要保护变量不被污染,则使用闭包
     如何创建闭包:
                  1. 先用外层函数封装一个受保护的局部变量
        2. 再在内层函数中操作外层函数的变量
        3. 外层函数将内层函数返回到外部,在外部反复调用。
  1. //闭包
  2.     function outer(){
  3.        var n=0;
  4.    return function(){return ++n;}
  5.    }
  6.    var getNum=outer();
  7.     //getNum:function(){return ++n;}
  8.    console.log(getNum());
  9.    console.log(getNum());
  10.    n=10;
  11.    console.log(getNum());
  12.    console.log(getNum());
复制葡京赌场网站
图片3.png
      
         如何判断是否是闭包:
           1. 函数嵌套!
           2. 内层函数使用外层函数的局部变量
           3. 内层函数被返回到外部,在外部调用。
      何时使用闭包:即要重用变量,又要保护变量不被污染
      缺点:占用更多内存空间——因为outer的活动对象无法释放。
   
     判断闭包输出:
       1. 同一次外层函数调用返回的内层函数,操作同一个变量
       2. 外层函数调用了几次,就有几个受保
例如:
  1. //闭包练习
  2.         function outer(){
  3.                 for(var i=0,arr=[];i<3;i++){
  4.                   arr[i]=function(){return i};//i是受保护的变量
  5.                 }
  6.                 //循环结束后,i=3
  7.                 return arr;
  8.         }
  9.         var getFuns=outer();
  10.         //只有1个受保护的变量i=3
  11.             //getFuns:[
  12.                                 //function(){return i},
  13.                                 //function(){return i},
  14.                                 //function(){return i}
  15.                     //]
  16.         console.log(getFuns[0]()); //3
  17.         console.log(getFuns[1]()); //3
  18.         console.log(getFuns[2]()); //3
复制葡京赌场网站
2016-01-04_215339.png

回复

使用道具 举报

最佳答案
0 

0

主题

6

帖子

52

积分

新人求带

积分
52
发表于 2016-1-5 10:56:46 | 显示全部楼层
比较基础!
回复

使用道具 举报

最佳答案
0 

0

主题

4682

帖子

50

积分

新人求带

积分
50
发表于 2018-5-7 22:09:25 | 显示全部楼层
这个要学习一下
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

4682

帖子

50

积分

新人求带

积分
50
发表于 2018-5-7 23:30:46 | 显示全部楼层
感谢分享交流,学习学习,希望获取更多有用的小程序源码
最佳答案
0 

0

主题

4682

帖子

50

积分

新人求带

积分
50
发表于 2018-5-7 23:42:13 | 显示全部楼层
真的是好东西。哇哈哈
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

4682

帖子

50

积分

新人求带

积分
50
发表于 2018-5-7 23:55:45 | 显示全部楼层
这个牛逼啊
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

4682

帖子

50

积分

新人求带

积分
50
发表于 2018-5-8 00:08:28 | 显示全部楼层
看起来不错,~!
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

1

帖子

30

积分

等待验证会员

积分
30
发表于 2019-3-8 16:20:07 | 显示全部楼层
32225669_201903031110500656589609.png

32225669_201903031111350516392691.png


32225669_201903031112370078181860.png


32225669_201903031113230827571431.png


32225669_201903031114100108339023.png


32225669_201903031717050542531638.png


32225669_201903031950400731189527.jpg


32225669_201903040745240041936178.jpg



回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

900

帖子

1万

积分

S2

积分
10403
发表于 2019-3-15 14:54:01 | 显示全部楼层
6666666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



www.mainetimberworks.com—微信开发者的分享交流平台,专注微信开发生态。

天津市滨海新区
中新生态城中成大道生态建设公寓9号楼3层301

微信葡京娱乐网址号

市场合作
[email protected]