三个JS函数闭包(closure)例子
闭包是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)例子的更多相关文章
- js 函数闭包内部返回函数体调用方法难点解答
今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...
- 彻底搞清js中闭包(Closure)的概念
js中闭包这个概念对于初学js的同学来说, 会比较陌生, 有些难以理解, 理解起来非常模糊. 今天就和大家一起来探讨一下这个玩意. 相信大家在看完后, 心中的迷惑会迎然而解. 闭包概念: 闭包就是有权 ...
- 关于js函数闭包的理解
在开始之前我们先来了解一下函数的变量作用域 JavaScript 变量可以是局部变量或全局变量. 私有变量可以用到闭包. 全局变量 函数可以访问由函数内部定义的变量,如: 实例1 function m ...
- JavaScript学习记录总结(六)——js函数闭包特性
<script type="text/javascript"> function arrdemo(){ var arr=["hello&q ...
- 如何编写高质量的 JS 函数(3) --函数式编程[理论篇]
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EWSqZuujHIRyx8Eb2SSidQ作者:杨昆 [编写高质量函数系列]中, <如何 ...
- VC与JavaScript交互(二) --- 调用JS函数
这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: //[html] <script type="text/javascript"& ...
- 两个实例轻松理解js函数预解析
js函数预解析 例子1: 先上一段代码,看看能不能写出最终的执行结果. console.log(a); var a = 1; console.log(a); function a(){ console ...
- js 函数定义的方式
js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...
- js函数只执行一次,函数重写,变量控制与闭包三种做法
一.情景需求 调用后台接口需要附带token信息,那么在每个请求的头部添加token的做法就不太优雅了:一个网站请求100次,那就得写添加100次token,假设某天接口有所变动,改起来就十分麻烦了. ...
随机推荐
- Mac下如何使用Vim
帖子是转载的,原帖地址 Mac OX其实已经默认装好了vim了.不需要再安装Macvim https://ruby-china.org/topics/4905 Mac开发利器之程序员编辑器MacVim ...
- chrome手动添加拓展
https://www.crx4chrome.com/crx/978/ Free Download Postman REST Client CRX 0.8.4.19 for ------------- ...
- 1.1 Eclipse下载安装
可直接上官网下载:http://www.eclipse.org/downloads/ 直接下载地址:http://www.eclipse.org/downloads/download.php?file ...
- bit、byte、k
bit(位/比特位):一个二进制数据0/1 byte(字节):简称B:1byte=8bit:一个英文字符占用1byte,一个汉字占用2byte k:1K=1024B M:1M=1024K
- 旋转数组中的最小数字,剑指offer,P70 二分查找来实现O(logn)的查找
public class MinNumberInRotatedArray { public int getMinNumInRotatedArray(int[] array) { if(array == ...
- 查看SQL语句执行时间与测试SQL语句性能
查看SQL语句执行时间与测试SQL语句性能 写程序的人,往往需要分析所写的SQL语句是否够优化.是否能提升执行效率,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了 ...
- 神州数码品众_Android面试
1.进程的定义,进程的调度: 2.线程的定义,多线程出错的描述: 3.数组和链表的定义和区别: 4.对链表的反序: 5.tree高度的计算: 6.设计一个存储系统,可以从客户端进行上传文件: 7.从长 ...
- PAT 团体程序设计天梯赛-练习集 L1-018. 大笨钟
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉.不过由于笨钟自己作息也不是很规律,所以敲钟并不定时.一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那 ...
- “this”总结
this 的几种情况: function a(){ alert(this); } 1.直接调用a()时,this指的是window对象. 2.对象调用 var obj = { a : a}obj.a( ...
- XML 树结构
XML 树结构 XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". 一个 XML 文档实例 XML 文档使用简单的具有自我描述性的语法: &l ...