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. LeetCode 周赛 352(2023/07/02)一场关于子数组的专题周赛

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问. 往期回顾:LeetCode 单周赛第 350 场 · 滑动窗口与离 ...

  2. IoTOS v1.0.0 开源 高效 实用 | 免费商用

    IoTOS v1.0.0 一款高效实用 IoTCard 管理 & 运营系统. IoTOS 目前取名范围过大,其主要用于IoTCard 管理业务以高效.健壮.灵活设计 SaaS.多语言.机器人推 ...

  3. 在行情一般的情况下,就说说23级应届生如何找java工作

    Java应届生找工作,不能单靠背面试题,更不能在简历中堆砌和找工作关系不大的校园实践经历,而是更要在面试中能证明自己的java相关商业项目经验.其实不少应届生Java求职者不是说没真实Java项目经验 ...

  4. 我是如何组织 Go 代码的(目录结构 依赖注入 wire)

    背景 对于大多数 Gopher 来说,编写 Go 程序会直接在目录建立 main.go,xxx.go,yyy.go-- 不是说不好,对于小型工程来说,简单反而简洁明了,我也提倡小工程没必要整一些花里胡 ...

  5. 使用Hexo搭建个人博客网站

    参考CSDN上的博客.特此感谢wsmrzx.

  6. Nginx配置Https缺少SSL模块(已解决)

    1.Linux下Nginx配置https nginx下载和安装此处就忽略,可自行百度 1.1.配置https 打开nginx配置文件 vim /usr/local/nginx/conf/nginx.c ...

  7. Spring-Bean的依赖注入的数据类型

    Spring-Bean的依赖注入的数据类型 除了对象的引用可以注入,普通数据类型,集合等都可以在容器中进行注入 数据的三种数据类型 普通数据类型 引用数据类型 集合数据类型 普通数据类型 public ...

  8. 我真的想知道,AI编译器中的IR是什么?

    随着深度学习的不断发展,AI 模型结构在快速演化,底层计算硬件技术更是层出不穷,对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来,还要应对 AI 框架的持续迭代. AI 编译器就 ...

  9. 万字长文浅析配置对MySQL服务器的影响

    有很多的服务器选项会影响这MySQL服务器的性能,比如内存中临时表的大小.排序缓冲区等.有些针对特定存储引擎(如InnoDB)的选项,也会对查询优化很有用. 调整服务器的配置从某种程度来说是一个影响全 ...

  10. js闭包的一些笔记

    闭包 闭包是一个可以访问外部作用域的内部函数,即使这个外部作用域已经执行结束 作用域 作用域决定这个变量的生命周期及其可见性.当我们创建一个函数,就会生成一个新的作用域. 通过var创建的变量只有函数 ...