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. Python Django 零基础从零到一部署服务,Hello Django!全文件夹目录和核心代码!

    在这篇文章中,我将手把手地教你如何从零开始部署一个使用Django框架的Python服务.无论你是一个刚开始接触开发的新手,还是一个有经验的开发者想要快速了解Django,这篇教程都会为你提供一条清晰 ...

  2. EtherCAT 转CCLINK网关连接三菱plc应用案例

    EtherCAT 现场总线协议是由德国倍福公司在 2003 年提出的,该通讯协议拓扑结构十分灵活,数据传输速度快,同步特性好,可以形成各种网络拓扑结构. 捷米特JM-ECT-CCLK  是自主研发的一 ...

  3. 数据库连接池之c3p0-0.9.1.2,16年的古董,发生连接泄露怎么查(一)

    背景 这篇文章是写给有缘人的,为什么这么说呢,因为本篇主要讲讲数据库连接池之c3p0-0.9.1.2版本. 年轻的朋友,可能没怎么听过c3p0了,或者也仅限于听说,这都很正常,因为c3p0算是200几 ...

  4. SPI总线学习笔记

    SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空 ...

  5. go run 和 go build的区别

    go run:编译并运行程序,但不会产生exe文件,运行速度也相应较慢 go build : 会产生exe文件,运行速度快

  6. word中查找替换不能使用 解决方案

    打开查找,然后点更多,最下面点不限定格式

  7. 使用synapse搭建matrix去中心化加密通信服务

    前言 首先必须介绍下Matrix.Matrix是一个开源.可交互.去中心化的实时通信服务框架.使用Matrix可以搭建安全的通信服务器,配合支持 Matrix 的客户端可以实现个人.团队间的实时聊天交 ...

  8. 利用IPV6随时访问家中影音Jellyfin

    本文章主要记录通过ipv6实现家庭影音中心在互联网上的访问. 之前很多方案都是通过第三方进行内网穿透,实际体验不是很好.目前ipv6发展迅速,完全可以取代这种以ipv4为中心的内网资源外网访问的方式. ...

  9. 2023CISCN华中赛区re

    2023CISCN华中赛区re 当时出的题 misc3-babyandroid 找so文件,加密过程也不复杂 每三个一组进行加密 这里就是先每个减去65 然后 大概是 y1=(31x1)%26+65 ...

  10. [FlareOn3]Challenge1

    打开直接f5,发现只有一个可疑函数 进入 base64??? base64解密