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. HCL 实验7:OSPF

    拓扑图 R1配置 [R1]int g0/1 [R1-GigabitEthernet0/1]ip add 192.168.4.1 24 [R1-GigabitEthernet0/1]undo shutd ...

  2. .net core提示502.5错误

    最近给WindowsServer2012服务器部署.Net Core项目,部署后一直显示502.5错误,具体如下: 网上找了一大堆解决办法都行不通,最后在stackoverflow中找到说是缺少一个补 ...

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

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

  4. Point Free

    这是一种函数编码模式: 把数据处理的过程定义成和数据无关的合成运算,不需要用到数据参数,只是简单合成运算步骤,但需要定义一些辅助的基本运算函数. for example:  采用了lodash的fp ...

  5. 上班第一天 Android 环境配置

    其实是昨天把大概 回归Android开发第一天 学会查 然后等待 反正我是不希望以后再查了 写出来吧 去谷歌那边把android studio下载下来 更新jdk版本(与传统的java开发不同 高版本 ...

  6. 2023ccpc大学生程序设计竞赛-zzh

    比赛开始没有开到签到题,看了一会别的题才开始跟榜.A题我写的,不过没有考虑到S长度为1的情况,wa了一次.然后lhy和zx把F题做了出来.接着他俩去看H,我去看B.他俩把H过了,B我想出了一个n*根n ...

  7. zabbix 主动模式下报文分析

    获取监控项列表 客户端发起请求 3次握手之后,请求监控项列表: {"request":"active checks","host":&quo ...

  8. 《最新出炉》系列入门篇-Python+Playwright自动化测试-10-标签页操作(tab)

    1.简介 标签操作其实也是基于浏览器上下文(BrowserContext)进行操作的,而且宏哥在之前的BrowserContext也有提到过,但是有的童鞋或者小伙伴还是不清楚怎么操作,或者思路有点模糊 ...

  9. 利用python分析pdf数据,分析上市公司财报

    import re import os.path import matplotlib import matplotlib.pyplot as plt from pdfminer.pdfparser i ...

  10. Django: request.GET.get()

    释义 query = request.GET.get('name', '') 寻找名为name的GET参数,而且如果参数没有提交,返回一个空的字符串. 对比request.GET() 如果使用requ ...