闭包是JS较难分辨的一个概念,我只是按自己的理解写下来,如有不对还请指出。

函数闭包是指当一个函数被定义在另一个函数内部时,这个内部函数使用到的变量会被封闭起来形成一个闭包,这些变量会保持形成闭包时设定的值。当内部函数被从外面访问时,它会显示出当时形成闭包时设定的值。下面举例说明:

例一:

 <body onload="alert(caculate(1,2))">

 </body>
</html>
<script type="text/javascript">
<!--
function caculate(op1,op2){
    var num=6;
    function add(){
        return op1+op2+num;
    }

    return add();
}
//-->
</script>

上面这段代码执行会显示9.

例二:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body onload="init()">
        <div>123</div>
        <div>abc</div>
        <div>456</div>
        <div>cde</div>
        <div>567</div>
        <div>efg</div>
        <div>789</div>
        <div>fgh</div>
 </body>
</html>
<script type="text/javascript">
<!--
function init(){
    var divs=document.getElementsByTagName("div");

    for(var i=0;i<divs.length;i++){
        var div=divs[i];
        (function(div){
            div.onclick=function(){
                alert(this.innerHTML);
            };
        })(div);
    }
}
//-->
</script>

例三:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body onload="init()">
    <table border="1">
        <tbody id="mytable">
            <tr><td>1</td><td>abc</td><td>123</td><td>1000</td></tr>
            <tr><td>2</td><td>bcd</td><td>456</td><td>10000</td></tr>
            <tr><td>3</td><td>cde</td><td>567</td><td>10000</td></tr>
            <tr><td>4</td><td>def</td><td>789</td><td>10000</td></tr>
        </tbody>
    </table>
 </body>
</html>
<script type="text/javascript">
<!--
function init(){
    var table=document.getElementById("mytable");

    for(var i=0;i<table.rows.length;i++){
        var tr=table.rows[i];
        var tds=tr.getElementsByTagName("td");

        for(var j=0;j<tds.length;j++){
            var td=tds[j];

            (function(td){
                td.onclick=function(){alert(this.innerHTML)};
            })(td);
        }
    }
}
//-->
</script>

例程下载

2017年1月15日12:56:02

三个JS函数闭包(closure)例子的更多相关文章

  1. js 函数闭包内部返回函数体调用方法难点解答

    今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...

  2. 彻底搞清js中闭包(Closure)的概念

    js中闭包这个概念对于初学js的同学来说, 会比较陌生, 有些难以理解, 理解起来非常模糊. 今天就和大家一起来探讨一下这个玩意. 相信大家在看完后, 心中的迷惑会迎然而解. 闭包概念: 闭包就是有权 ...

  3. 关于js函数闭包的理解

    在开始之前我们先来了解一下函数的变量作用域 JavaScript 变量可以是局部变量或全局变量. 私有变量可以用到闭包. 全局变量 函数可以访问由函数内部定义的变量,如: 实例1 function m ...

  4. JavaScript学习记录总结(六)——js函数闭包特性

    <script type="text/javascript">    function arrdemo(){        var arr=["hello&q ...

  5. 如何编写高质量的 JS 函数(3) --函数式编程[理论篇]

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EWSqZuujHIRyx8Eb2SSidQ作者:杨昆 [编写高质量函数系列]中, <如何 ...

  6. VC与JavaScript交互(二) --- 调用JS函数

    这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: //[html] <script type="text/javascript"& ...

  7. 两个实例轻松理解js函数预解析

    js函数预解析 例子1: 先上一段代码,看看能不能写出最终的执行结果. console.log(a); var a = 1; console.log(a); function a(){ console ...

  8. js 函数定义的方式

    js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...

  9. js函数只执行一次,函数重写,变量控制与闭包三种做法

    一.情景需求 调用后台接口需要附带token信息,那么在每个请求的头部添加token的做法就不太优雅了:一个网站请求100次,那就得写添加100次token,假设某天接口有所变动,改起来就十分麻烦了. ...

随机推荐

  1. sqlite增删改查

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  2. php 中文转拼音首字母问题

    <?php /* 中文汉字转拼音首字母的PHP简易实现方法. 要求: 只能是GB2312码表里面中文字符 转换得到字符串对应的拼音首字母大写. 用法: echo zh2py::conv('Chi ...

  3. 教务处sso设计缺陷

    前言 刚学习python,觉得比较枯燥总不知道从哪里入手,偶然一次,同学让我帮忙看看选课,发给我的是学校统一的默认格式的密码,突然就想试试有多少人还是默认密码,从QQ群里找了一份学生信息尝试了一下,发 ...

  4. Git忽略对特定文件的跟踪和提交

    1.有未提交过的文件,并且此文件项目组中的其他人员也需要忽略,可将此文件的完整路径写入项目文件夹下的.gitignore文件. 2.有未提交过的文件,此这些文件与项目组中的其他人员无关,毋须写入.gi ...

  5. jquery学习笔记2——jq效果

    一.显示隐藏: 可以使用show()和hide()方法来显示隐藏: $("#hide").click(function(){ $("p").hide(); }) ...

  6. ubuntu 上配置python +selenium环境

    1.ubuntu 自带了python, 可以打开终端输入python 回车后如果显示版本信息就说明已经安装 2.安装安装python setup tools apt-get install pytho ...

  7. caffe编译出现的新错误

    1.include/caffe/blob.hpp:9:34: fatal error: caffe/proto/caffe.pb.h: No such file or directory #inclu ...

  8. sdk是啥

    SDK 英文名称  software  development kit ,即 软件开发工具包,就好第三方服务商提供的实现软件某功能的工具包

  9. 【第二篇】Volley的使用之加载图片

    Volley加载图片有两种方式: 1,ImageRequest 来对网络图片进行请求,放入请求队列,获取后现在在控件上面. 2,NetworkImageView 最为自定义控件来自动加载网络图片. 3 ...

  10. 通用mapper的使用

    通用mapper的使用 导入依赖 <dependency> <groupId>com.github.abel533</groupId> <artifactId ...