1。循环绑定

No Use:

  var lists = document.getElementsByTagName('li');

  for(var i=0;i<lists.length;i<l;i++){

   lists[i].onclick=function(){alert(i);};

  }



结果:点击每一个li,都是弹出lists.length的值。

原因:onclick事件中的i值只是引用,最后循环执行完了,

i = lists.length。



Use:

 var lists = document.getElementsByTagName(‘li’);

 for(var i=0;i<lists.length;i<l;i++){

  lists[i].onclick=function(k){

   return function(){

    alert(k);

   }

  }(i);

 }



结果:点击每一个li,弹出对应li的编号i值。--》点击观看效果。

   

原因:将i值传递进内部的函数中,此时函数已经执行了,所以,i这个值就是当时的值。

2。配置对应访问

No Use:

 function getType(type){

  var list = {

  ‘a’:'配置一',

  ‘b’:'配置二',

  ‘c’:'配置三'

  }

  return list[type];

}

结果:返回需要的配置值。

分析:每次调用都需要重新定义list变量以及赋值;

Use:

 var getType = function(){

  var list = {

  ‘a’:’配置一’,

  ‘b’:’配置二’,

  ‘c’:’配置三’

  };

  return function(type){

    return list[type];

  };

 }();



--》点击观看效果。

结果:返回需要配置值。

分析:只需要定义与赋值一次list变量。

3。封装类

No Use:

 function ClassA(name){

  this.name = name;

  this.getName = function(){

   return this.name;

  }

 }

结果:正常定义需要类。

Use:

  var ClassA = function(){

   function init(name){

    this.name = name;

    this.getName = function(){

      return this.name;

    }

  }

  return init;

 }();

结果:更进一步封装类。看起来优雅些。

4。自执行,避免全局变量污染

No Use:

 var a = ‘1’;

 var b = ‘2’;

 alert(a+b);



 结果:弹出12。

分析:多了两个全局变量a与b。

Use:

  function(){

   var a = ‘1’;

   var b = ‘2’;

   alert(a+b);

 }();



结果:弹出12。

分析:函数执行完,变量a与b消失,不存在全局变量。



5。将json对象的公用函数私有化

No Use:

 var data = {

  getA:function(){return ‘A’},

  getB:function(){return ‘B’},

  p_get:function(){return this.getA()+this.getB();}

 }

 data.p_get();



结果:返回’AB’。

分析:getA与getB方法,只是提供给p_get方法使用,属于私有方法,不应该变成公用方法,data.getA()也能访问得到。

Use:

  var data = function(){

   function getA(){return ‘A’};

   function getB(){return ‘B’};

   var json = {

     p_get:function(){return getA()+getB();}

   }

   return json;

  }();

  data.p_get();



结果:返回’AB’;

分析:getA与getB只能在内部访问,无法通过data.getA方式访问。

js闭包使用之处的更多相关文章

  1. js闭包的作用

    js闭包的用途详解 js闭包可以用在许多地方.它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中.具体怎么理解呢,各位看官请仔细看好下文   我们来看 ...

  2. javascript深入理解js闭包(转)

    javascript深入理解js闭包 转载  2010-07-03   作者:    我要评论 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. ...

  3. 简单详细讲解js闭包(看完不懂你砍我!!!)

    <javascript高级程序设计>中闭包的概念: 闭包,其实是一种语言特性,它是指的是程序设计语言中,允许将函数看作对象,然后能像在对象中的操作般在函数中定义实例(局部)变量,而这些变量 ...

  4. js闭包的作用域以及闭包案列的介绍:

    转载▼ 标签: it   js闭包的作用域以及闭包案列的介绍:   首先我们根据前面的介绍来分析js闭包有什么作用,他会给我们编程带来什么好处? 闭包是为了更方便我们在处理js函数的时候会遇到以下的几 ...

  5. 大部分人都会做错的经典JS闭包面试题

    由工作中演变而来的面试题 这是一个我工作当中的遇到的一个问题,似乎很有趣,就当做了一道题去面试,发现几乎没人能全部答对并说出原因,遂拿出来聊一聊吧. 先看题目代码: function fun(n,o) ...

  6. Js闭包常见三种用法

        Js闭包特性源于内部函数可以将外部函数的活动对象保存在自己的作用域链上,所以使内部函数的可以将外部函数的活动对象占为己有,可以在外部函数销毁时依然存有外部函数内的活动对象内容,这样做的好处是可 ...

  7. js闭包之初步理解( JavaScript closure)

    闭包一直是js中一个比较难于理解的东西,而平时用途又非常多,因此不得不对闭包进行必要的理解,现在来说说我对js闭包的理解. 要理解闭包,肯定是要先了解js的一个重要特性, 回想一下,那就是函数作用域, ...

  8. (原创)JS闭包看代码理解

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  9. js闭包理解

    js闭包的作用是使函数外可以访问函数内部的变量,是通过 在函数内部 定义 访问函数内变量 的函数实现的,内部的一个函数产生一个闭包 function a() { var i=0; return fun ...

  10. js闭包理解实例小结

    Js闭包 闭包前要了解的知识  1. 函数作用域 (1).Js语言特殊之处在于函数内部可以直接读取全局变量 <script type="text/javascript"> ...

随机推荐

  1. Multi-Modal Attention Network Learning for Semantic Source Code Retrieval 解读

    Multi-Modal Attention Network Learning for Semantic Source Code Retrieva Multi-Modal Attention Netwo ...

  2. Unity中的PostProcessScene:深入解析与实用案例

    Unity中的PostProcessScene:深入解析与实用案例 在Unity游戏开发中,我们经常需要对场景进行后处理,以实现更丰富的视觉效果.Unity提供了一个名为PostProcessScen ...

  3. Code Generate V2.0 代码生成器

    Code Generate 代码生成器 系统首页 使用说明 系统默认会根据SQL生成字段信息 className.fieldList.classComment 如下所示: 建表语句 CREATE TA ...

  4. 春节无法线下社交聚会,来线上“一起X”共享体验

    引语: 共享体验或许是全真互联网时代最显著的标志. 被疫情深刻改变的一年里,人们的社交关系和社交活动正在发生巨大的改变. 一方面,从线下转线上,我们能通过互联网连接更多的人,参与各种形式的社交活动,将 ...

  5. 【RabbitMQ】当队列中消息数量超过最大长度的淘汰策略

    [RabbitMQ]当队列中消息数量超过最大长度的淘汰策略 说明 最近在研究RabbitMQ如何实现延时队列时发现消息进入死信队列的情况之一就是当消息数量超过队列设置的最大长度时会被丢入死信队列,看到 ...

  6. Redis的设计与实现-总结

    个人真的很喜欢这本书, 从对C语言一窍不通, 到发现C语言竟然如此简洁, 以至于我喜欢上了C! 对此前面的底层数据结构也读了几次, 大致整理了书里的内容, 后面的就粗略看了一下, 不再细细整理了. R ...

  7. Python数据分析易错知识点归纳(六):机器学习

    六.机器学习 分类和聚类的区别 分类是有监督学习,聚类是无监督学习 分类算法用于预测新样本,聚类用于理解已知数据 标准化/归一化 type_se_num = type_se[type_se!= 'ob ...

  8. Ubuntu16.04配置NTP时间同步

    环境 查看系统版本:lsb_release -a 名词解释 PDT是指太平洋夏令时(Pacific Daylight Time),是美国西部地区和加拿大的一部分地区使用的时区.它位于UTC-7和UTC ...

  9. 理解TCP四次挥手

    以AB通电话举例: A的视角 A突然说,"现在几点了",进入FIN_WAIT_1 B回,"啊,10点了",A听到后不说话,进入FIN_WAIT_2 然后B说,& ...

  10. JFrame一些基础小知识

    JFrame.setLocationRelativeTo方法 JFrame.setLocationRelativeTo()是一个Java Swing中的方法,它用于将窗口居中显示在屏幕上. 当你调用该 ...