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. smarty 拼接字符串

    smarty 拼接字符串 newstr = [oldstr]|cat:[appendstr] 1 {$name = "Tom"} 2 {$phone = "1381234 ...

  2. C语言。格式化符号

    %s 输出字符串 %d 输出整形数字 %f 输出浮点数数字 %c 输出字符 %x 输出16进制 %04d 输出长度固定的整形数字(0001,0002,....)

  3. P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解

    P7561[JOISC 2021 Day2] 道路の建設案 (Road Construction) 题解 题目描述 JOI 国是一个 \(x\times y\) 的二维平面,王国里有 \(n\) 个城 ...

  4. SQL Server中获取不同格式的日期

    select * from 表名 where Convert(varchar(100),日期字段,23)='2008-12-15' Convert函数的应用: Select CONVERT(varch ...

  5. (占坑编辑中)hexo博客github page更换域名

    hexo博客github page更换域名 檗科下的Cname文件一定要改为最近的域名

  6. .NET for Apache Spark 入门演练

    .NET for Apache Spark 入门演练 微软官方文档: .NET for Apache Spark 入门 | Microsoft Learn 注意:由于本次在windows平台下进行演练 ...

  7. Spring相关API

    ApplicationContext的继承体系 applicationContext applicationContext:接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean A ...

  8. shell: logging + readlog

    logging #!/bin/bash # a small tool for logging sommething # # 1. read your input # 2. save to logs f ...

  9. linux 软件包:UnixBench 性能测试工具、跑分神器

    目录 安装 使用 结果示例 测试项说明 UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能.Unixbench ...

  10. Notepad正则表达式用法

    https://blog.csdn.net/cuckoo1/article/details/52165449