`

JS中的闭包

阅读更多

        闭包是指内层的函数可以引用存在于包围他的函数内的变量,即使外层的函数的执行已经终止。

一.闭包使代码更清晰,例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>闭包测试</title>  
</head>  
<body>  
	<div id="main">我的闭包测试!</div>
<script type="text/javascript">  
	var obj=document.getElementById("main");   
	obj.style.border="1px #cdcdcd solid";   
	setTimeout(function(){   
	    obj.style.border="1px #ff0000 solid";   
	},4000);   
	function alertMsg(msg,time){   
	    setTimeout(function(){   
	        alert(msg);//这个参数msg就是引用了alertMsg(msg,time)中的参数msg   
	    },time);   
	}   
	alertMsg("我在进行闭包测试!",2000);   
</script>
</body>
</html>

运行效果:

点击“确定”,两秒后边框变色。

 

二.用个闭包实现函数的Curry化,例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>闭包测试</title>  
</head>  
<body>  
	<div id="main">我的闭包测试!</div>
<script type="text/javascript">  
	function addNum(num){   
	    return function(toAdd){   
	        return num+toAdd;   
	    };   
	}   
	var addFive=addNum(5);   
	alert(addFive(3));
</script>
</body>
</html>

运行效果:

 

三.使用匿名函数来隐藏全局作用域变量,例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>闭包测试</title>  
</head>  
<body>  
	<div id="main">我的闭包测试!</div>
<script type="text/javascript">  
	(function(){   
	    var msg="my name is feiwen.";   
	    window.onload = setTimeout(function(){   
	        alert(msg);   
	    },3000);   
	})();
</script>
</body>
</html>

运行效果:

 

四.使用匿名函数来激发创建多个使用闭包的函数所需的作用域,例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>闭包测试</title>  
</head>  
<body>  
	<div id="main">我的闭包测试!</div>
<script type="text/javascript">  
	var obj=document.getElementById("main");   
	var items=["click","mouseout"];   
	for(var i=0;i<items.length; i++){   
	   (function(){   
	       var item=items[i];   
	       obj["on"+item]=function(){   
	           alert("what is you doing:"+item);   
	       }   
	   })();   
	}
</script>
</body>
</html>

运行效果:

鼠标移开,弹出如下对话框

点击“我的闭包测试”,弹出如下对话框。

  • 大小: 47.5 KB
  • 大小: 35.9 KB
  • 大小: 41.2 KB
  • 大小: 43.1 KB
  • 大小: 49.4 KB
  • 大小: 46.4 KB
分享到:
评论

相关推荐

    JavaScript中闭包之浅析解读(必看篇)_.docx

    JavaScript中的闭包是一种重要的编程概念,它涉及到函数和作用域的高级用法。闭包简单来说,就是一个函数能够访问并操作其外部作用域中的变量,即使在其外部函数已经执行完毕后,仍然能保持对外部作用域的访问权限。...

    JS闭包可被利用的常见场景

    在JavaScript中,闭包是指一个函数能够访问并操作其定义时的作用域内的变量,即使该函数在其外部作用域被调用。以下将详细介绍两个常见场景中闭包的应用。 场景一:采用函数引用方式的 `setTimeout` 调用 在Web...

    js闭包个人理解

    - **内存泄漏**:如果闭包中引用的对象长时间不被释放,可能会导致内存泄漏。 - **性能问题**:频繁地创建闭包可能会对性能产生影响,尤其是在移动设备上。 #### 总结 通过上述分析,我们可以看出JavaScript中的...

    Javascript 闭包完整解释

    ### JavaScript闭包完整解释 #### 一、闭包的基本概念 **闭包**是一个非常重要的JavaScript概念,它指的是一个函数能够记住并访问其外部作用域中的变量的能力,即使该函数在其外部作用域之外被调用也是如此。具体...

    JS 闭包的理解

    总之,JavaScript闭包是理解和编写高效、模块化代码的关键概念,它能帮助我们更好地管理作用域、变量和内存,从而提高代码的复用性和可维护性。在日常开发中,熟练掌握闭包不仅可以提升编程技能,也能让代码更加优雅...

    js闭包详细讲解

    ### JavaScript闭包详解 #### 一、闭包概念与特性 **闭包**是JavaScript语言的一个重要特性,它使得函数可以访问并操作其外部作用域内的变量,即使该函数在其外部作用域之外被调用。要理解闭包,首先需要了解...

    javascript中闭包概念与用法深入理解

    本文实例分析了javascript中闭包概念与用法。分享给大家供大家参考,具体如下: 1.问题的引出,什么时候会遇到闭包? 首先因为JS是没有块状作用域的,但是有函数作用域即函数作为了局部变量之间的界限,不同函数内的...

    JavaScript闭包函数

    闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...

    js闭包写法学习demo

    以下是一些关于JavaScript闭包的关键知识点: 1. **函数嵌套**:闭包最常见的形式是内部函数引用了外部函数的变量。例如: ```javascript function outerFunction() { var outerVar = 'I am from the outer ...

    js闭包学习

    JavaScript中的闭包是一种强大的特性,它允许函数访问和操作其外部作用域内的变量,即使在外部函数执行完毕后,闭包依然能保持对外部变量的访问。闭包的关键在于,它能够保留函数内部状态,使得数据得以持久化,这...

    理解_JavaScript_闭包

    本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。

    js闭包理解之倒计时

    在这个“js闭包理解之倒计时”的主题中,我们将深入探讨如何利用闭包实现一个实际项目中的倒计时功能。 首先,让我们了解一下闭包的基本概念。在JavaScript中,每当函数被创建时,它都会形成一个闭包,这个闭包包含...

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    JS中闭包的经典用法小结(2则示例)

    主要介绍了JS中闭包的经典用法,结合2则示例分析了JS闭包的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    JavaScript中闭包之浅析解读(必看篇)

    当函数计算出一个值之后,可以将结果保存在闭包中,当下次调用同一个函数时,可以直接返回之前计算好的结果。 6. 事件处理:在处理动态绑定事件时,常常使用闭包来保存事件处理器的状态。例如,在循环中为多个元素...

    javascript闭包详解中文word版

    资源名称:javascript闭包详解 中文word版   内容简介: Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C 的程序员来说是一个新的...

    跟我学习javascript的闭包

    闭包:是指有权访问另外一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部创建另外一个函数。 直接上例子 function a(){ var i=0; function b(){ alert&#40;++i&#41;; } return

    JS中的闭包理解。。。。。。。。

    这里,立即执行的匿名函数(IIFE)创建了一个新的作用域,使得每次循环都能保持对`i`的独立引用,避免了闭包中的变量共享问题。 总的来说,闭包是JavaScript中一个非常重要的概念,它提供了维护变量状态和访问私有...

    js闭包的理解以及作用.docx

    闭包是JavaScript中实现数据隐藏和封装的一种重要手段,对于理解和编写高效的JS代码至关重要。 1. **作用域的理解** - **全局变量**:在整个程序中都可访问的变量,它们在整个脚本的生命周期内都存在。 - **局部...

    JavaScript闭包

    Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态...本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。

Global site tag (gtag.js) - Google Analytics