首页 > 编程语言 > 详细

Javascript 闭包

时间:2015-11-09 10:41:13      阅读:233      评论:0      收藏:0      [点我收藏+]

在正常情况下,函数外部无法读取函数内的局部变量,但是可以在函数内部定义一个新的函数,再return这个函数来实现读取局部变量

 

在Javascript中,查找变量时会按照 “作用域链”的结构进行,即是会一级一级地向上寻找父函数的变量,也就是说,父函数的所有变量对子函数都是可见的,反子则不成立

 

技术分享

 

根据上页代码运行结果输出的是”kevin”,执行f3相当于执行了f2函数,在f1内部形成了一个活动对象,在f1执行时,内部的name会覆盖外部的变量的值,所以name=“kevin”

F1执行完后会自动销毁,但内部的f2的引用给了f3,所以name的值没有销毁,销毁的是作用域链

 

	<script type="text/javascript">
		window.onload = function(){
			var $li = document.getElementsByTagName("li");
			/*
			for (i = 0; i < $li.length; i++) {
				$li[i].onclick = (function(n){
					console.log($li[n].innerHTML);
				})(i)
			};*/			

			for (var i = 0; i < $li.length; i++) {
				$li[i].onclick = (function(n){
					return function (){
						console.log($li[n].innerHTML);
					};
				})(i)
			};		
		}

	</script>
</head>
<body>
	<ul>
		<li>广州</li>
		<li>上海</li>
		<li>北京</li>
		<li>南京</li>
	</ul>
</body>

 

闭包简单理解成“定义在一个函数内部的函数”,将函数内部和函数外部连接起来的一座桥梁。

 

Javascript 闭包

原文:http://www.cnblogs.com/kevindon002/p/4949160.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!