源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

javascript闭包功能与用法实例分析

  • 时间:2020-07-19 00:17 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:javascript闭包功能与用法实例分析
本文实例讲述了javascript闭包功能与用法。分享给大家供大家参考,具体如下: [b]理解闭包[/b] 闭包这个东西,确实是很麻烦。之前我自己的理解也是有一点误差,所以今天将文章修改修改,争取将自己的理解进一步准确化。 闭包说得通熟易懂一点,就是指[b]有权访问另一个函数作用域的变量的函数[/b]。创建闭包的常见方式,就是[b]在一个函数内部创建另外一个函数,并返回[/b]。 我们这里举一个例子来说明,首先我们在函数f1内部定义一个函数f2。
function f1(){
  var n=999;
  function f2(){
    alert(n); // 999
  }
}

f2可以访问f1的作用域,反过来就不行了。现在我们想访问f1中的n,在外层却访问不到,怎么办呢?将f2作为f1的返回值就可以了:
function f1(){
  var n=999;
  function f2(){
    alert(n);
  }
  return f2;
}
var result=f1();
result(); // 999

这个就是闭包。 其实也很简单,那么闭包有什么用呢? [b]闭包的使用[/b] 之前的自己只知道闭包的概念,却并不知道其存在的价值和意义。直到自己在项目中遇到类似的问题后,才发现只有闭包才能解决的情况。 闭包是使用可以带来以下[b]好处[/b]: 1. 希望一个变量长期驻扎在内存中 2. 避免全局变量的污染 3. 私有成员的存在 我们刚才说到过,闭包可以读取到函数内部的变量,这是由于闭包后函数的堆栈不会释放,也就是说这些值始终保持在内存中。这是一个优点,也是一个缺点。 我们可以通过闭包来实现一个计数器,而不用担心全局变量的污染:
function f1(){
  var n=999;
  nAdd=function(){n+=1}
  function f2(){
    alert(n);
  }
  return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
可以看到n一直存储在内存中,并没有在f1调用后被自动清除。 我们再来看看如何通过闭包来模拟JavaScript中的私有成员:
var aaa = (function(){
  var a = 1;
  function bbb(){
    a++;
    alert(a);
  }
  function ccc(){
    a++;
    alert(a);
  }
  return {
    b:bbb,    //json结构
    c:ccc
  }
})();
aaa.b();  //2
aaa.c();  //3
这样就可以提供指定的变量供外界访问了。 [b]闭包解决的问题[/b] 这是一个很常见的问题,就是利用javascript处理循环的时候,索引i的值不能有效的利用: [img]http://files.jb51.net/file_images/article/201704/201746145155881.png?201736145235[/img] 这里改成如下格式,形成10个闭包来解决即可: [img]http://files.jb51.net/file_images/article/201704/201746145252637.png?201736145331[/img] 更多关于JavaScript相关内容可查看本站专题:《[url=http://www.1sucai.cn/Special/85.htm]javascript面向对象入门教程[/url]》、《[url=http://www.1sucai.cn/Special/313.htm]JavaScript中json操作技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/502.htm]JavaScript切换特效与技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/472.htm]JavaScript查找算法技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/439.htm]JavaScript错误与调试技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/297.htm]JavaScript数据结构与算法技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/281.htm]JavaScript遍历算法与技巧总结[/url]》及《[url=http://www.1sucai.cn/Special/119.htm]JavaScript数学运算用法总结[/url]》 希望本文所述对大家JavaScript程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部