轻松学习Javascript闭包函数
闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的.
不过我们也还是从闭包的含义出发。
闭包是指函数有自由独立的变量。换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境。
官方解释说完后,我们先来看一个简单计数的例子.
var c = 0; function count(){ c++; } count();// 1 count();// 2
这个例子是利用了全局变量来实现,但是这里有个问题是,c这个变量也容易被其他方式所调用,这时候就可能会改变 c 的存储值.造成这个count计数的失效.那怎么很好的处理这个问题呢!我们会想到的是使用局部变量的方式来处理.比如:
function count(){ var c = 0; function add(){ c++; } add(); } count();// c = 1 count();// c = 1
因为这样创建之后,内部变量只存在于count函数创建执行的时候,执行完之后,整个函数就会被丢弃掉.就无法达到有记忆的能力.那要怎么来实现呢?那我们就用闭包来解决.我要重新提一次:闭包 = 函数 + 环境
function count(){ var c = 0; function add(){ c++; } return add; } var ct = count(); ct(); // c = 1 ct(); // c = 2
这个时候我们就可以通过这个闭包来完成计数的能力.ct就是一个闭包函数,内部的环境就是这个局部变量 c. 这里我们达到的就是内部数据,外部来操作.那闭包除了这个还有什么其他功能呢?
用闭包模拟私有方法
这有点像JAVA的私有方法或者私有变量,只能允许自己来操作!如果外部操作,就需要设定公开的方法来操作.
var person = (function(){ var _name = "编程的人"; var age = 20; return { add:function(){ age++; }, jian:function(){ age--; }, getAge:function() { return age; }, getName:function(){ return _name; }, setName: function (name) { _name = name; } } })(); person.add(); var age = person.getAge(); console.log(age) person.setName("编程的人公众号:bianchengderen") console.log(person.getName())
这里应该很容易理解了吧! 有点面向对象编程的感觉。当然Javascript现在也有面向对象编程的特点.这点我们以后来说明.
目前为止,我们从计数到内部私有化的例子,来说明闭包,希望大家能简单明白其中的道理,当然闭包还有其他的功能利用是比较方便的。
以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。
相关推荐
-
javascript中的return和闭包函数浅析
高手绕道!这跟闭包本身没什么大的关系,也不知道怎么取标题,随便凑了个数,望见谅! 今天一个刚学js的朋友给了我一段代码问为什么方法不执行,代码如下: 复制代码 代码如下: function makefunc(x) { return function (){ return x; }}alert(makefunc(0)); 其实不是不执行,只是朋友的意思这里alert出来的应该是"0",而不是function (){return x;}.不是脚本写错了,只是没搞懂return,从当前函数
-
javascript 闭包函数做显隐内容
New Document .a{ width:200px; font-size:12px; font-weight:bold; height:30px; line-height:30px; background:url(/images/default/header_bg.gif); margin-top:5px; } .a a{ text-Decoration:none;} .aa{ width:200px; height:100px; border:3px groove #91D2FF; di
-
浅谈JavaScript的闭包函数
在JavaScript中,闭包恐怕是很多人不能理解的一个概念了,甚至很多人也会把闭包和匿名函数混淆. 闭包是有权访问另一个函数作用域中的变量的函数.首先要明白的就是,闭包是函数.由于要求它可以访问另一个函数的作用于中的变量,所以我们往往是在一个函数的内部创建另一个函数,而"另一个函数"就是闭包. 比如之前提到过的作为比较函数: function createComparisonFunction(propertyName){ return function(object1,object2
-
js实现拖拽 闭包函数详细介绍
js拖拽 采用简单的闭包实现方式 复制代码 代码如下: /** * Created with JetBrains WebStorm. * User: lsj * Date: 12-11-24 * Time: 下午12:59 * To change this template use File | Settings | File Templates. */ var dragmanager=(function() { //标识移动元素z轴坐标 var index_z=1; //当前的拖拽元素 var
-
javascript高级编程之函数表达式 递归和闭包函数
定义函数表达式有两种方式:函数声明和函数表达式. 函数声明如下: function functionName(arg0,arg1,arg2){ //函数体 } 首先是function关键字,然后是函数的名字. FF,Safrai,Chrome和Opera都给函数定义了一个非标准的name属性,通过这个属性可以访问到函数指定的名字.这个函数的值永远等于跟在function关键字后面的标识符. //只在FF,Safari,Chrome和Opera有效 alert(functionName.name)
-
JavaScript闭包函数访问外部变量的方法
闭包是指有权访问另一个函数作用域中的变量的函数,但作用域的配置机制有一个需要注意的地方,即闭包只能取得包含函数中任何变量的最后一个值. 如以下案例: function create(){ var arr = new Array(); for (var i=0; i<10; i++){ arr[i] = function(){ return i; }; } return arr; } var c
-
轻松学习Javascript闭包函数
闭包函数是什么?在开始学习的闭包的时候,大家很能都比较难理解.就从他的官方解释来说,都是比较概念化的. 不过我们也还是从闭包的含义出发. 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以"记忆"它创建时候的环境. 官方解释说完后,我们先来看一个简单计数的例子. var c = 0; function count(){ c++; } count();// 1 count();// 2 这个例子是利用了全局变量来实现,但是这里有个问题是,c这个变量也容易被其他方式所调用,这时
-
轻松学习Javascript闭包
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 当function里嵌套function时,内部的function可以访问外部function里的变量. function foo(x) { var tmp = 3; function bar(y) { alert(x + y + (++tmp)); } bar(10); } foo(2) 不管执行多少次,都会alert 16,因为bar能访问foo的参数x,也能访问foo的变量tmp. 但
-
一文了解JavaScript闭包函数
目录 变量作用域 闭包的概念 闭包的用途 闭包的缺点 最后总结一下闭包的好处与坏处 总结 变量作用域 要理解JavaScript闭包,就要先理解JavaScript的变量作用域. 变量的作用域有两种:全局的和局部的(全局变量和局部变量) JavaScript中,在函数内部可以直接读取到全局变量. var n=10 function fn(){ alert(n) } fn() //10 而在函数外部无法读取到函数内部的变量. function fn(){ var n=10; } fn() aler
-
JavaScript该如何学习 怎样轻松学习JavaScript
js给初学者的印象总是那么的"杂而乱",相信很多初学者都在找轻松学习js的途径.我试着总结自己学习多年js的经验,希望能给后来的学习者探索出一条"轻松学习js之路".js给人那种感觉的原因多半是因为它如下的特点: A:本身知识很抽象.晦涩难懂,如:闭包.内置对象.DOM. B:本身内容很多,如函数库.对象库就一大堆. C:混合多种编程思想.它里面不但牵涉面向过程编程思想,又有面向对象编程思想,同时,它的面向对象还和别的编程语言(如:C++,JAVA,PHP)不大一样
-
仅9张思维导图帮你轻松学习Javascript 就这么简单
学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将分享收集的 9 张 javascript 相关的思维导图(非原创). 思维导图小tips: 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像.颜色等建立记忆链接,思维导图充分运用左右脑的机能,利用记忆.阅读.思维的规律,协助人们在科学与艺术.逻辑与想象之间平衡发展,从而开启人类大脑的无
-
跟我学习javascript的函数和函数表达式
1.函数声明与函数表达式 在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符: 函数声明:function 函数名称 (参数:可选){ 函数体 } 函数表达式:function 函数名称(可选)(参数:可选){ 函数体 } 所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函
-
轻松学习JavaScript函数中的 Rest 参数
JavaScript函数可以使用任意数量的参数.与其他语言(如C#和Java)不同,你可以在调用JavaScript函数时传递任意数量的参数.JavaScript函数允许未知数量的函数参数.在ECMAScript 6之前,JavaScript有一个变量来访问这些未知或可变数目的参数,这是一个类似数组的对象,并非一个数组.细想以下代码来理解arguments变量: function add(){ var result = 0; for(let i=0;i<arguments.length;i++)
-
轻松理解JavaScript闭包
摘要 闭包机制是JavaScript的重点和难点,本文希望能帮助大家轻松的学习闭包 一.什么是闭包? 闭包就是可以访问另一个函数作用域中变量的函数. 下面列举出常见的闭包实现方式,以例子讲解闭包概念 function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000 f1
-
零基础轻松学JavaScript闭包
本文面向初学者,大神轻喷. 闭包是什么? 初学javascript的人,都会接触到一个东西叫做闭包,听起来感觉很高大上的.网上也有各种五花八门的解释,其实我个人感觉,没必要用太理论化的观念来看待闭包. 事实上,你每天都在用闭包,只是你不知道罢了. 比如: var cheese = '奶酪'; var test = function(){ alert(cheese); } OK,你已经写了一个闭包. 函数也是一个数据类型 变量 cheese 是在全局作用域中的一个变量,当你创建了一个 test 函
-
继续学习javascript闭包
一.什么是闭包? 官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包.不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的"闭包".看下面这段代码: function a() { var i = 0; function b() { alert(
随机推荐
- js简单实现表单中点击按钮动态增加输入框数量的方法
- MySQL数据表字段内容的批量修改、清空、复制等更新命令
- div flash firefox div层总是被flash层遮盖
- 海量文件复制和备份的技巧(xcopy命令实现)
- iOS开发微信收款到账语音提醒功能思路详解
- Android实现ListView异步加载图片的方法
- php链表用法实例分析
- Ajax初试之读取数据篇
- jsp要实现屏蔽退格键问题探讨
- 巧用jquery解决下拉菜单被Div遮挡的相关问题
- 通过js判断访客显示器屏幕分辨率并给出提示
- 服务器安全设置_高级篇
- Windows 2008 r2 防火墙设置端口例外的方法
- 注册表应用100例—注册表使用全攻略之十一
- Ubuntu系统网络故障排查的方法
- python实现跨文件全局变量的方法
- mingw编译的windows命令行贪吃蛇示例
- Android 实现加载大图片的方法
- vue-cli+webpack项目 修改项目名称的方法
- 解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available