js代码中的闭包
作为一个后台开发人员了解前端非常重要,尤其是深处学校实验室做项目时前端把写好的代码直接给你,然后你在修改的时候。我经常做的就是修改前端的代码的HTML和后台交互的部分以及js的ajax部分,之后修改之后也会遇到很多问题,所以只能自己继续修改前端,学习了前端的不少知识。
js的闭包是一个很重要的概念,在编写js代码中经常会被用到的,也是js的特色以及难点。
知道闭包首先得知道js的变量和作用域。
在js中变量不向C/C++/Java中那样,得先定义在使用,js中可以直接使用变量,比如:
n=100;
当然还有一种方式就是:
num1=10;
var num2=15;
这两种方式在平时这种情况下看不出来其不同,但是一旦牵扯到了全局变量和局部变量之后就会看到不同之处,js的特殊之处就在于函数内部可以直接读取全局变量:
var num=10;
function readNum(){
alert(num);
}
readNum();
以上代码可以输出的结果是10,这一点很简单,因为num是全局变量,所以函数可以直接访问。那么函数外部当然就无法访问局部变量:
function readNum(){
var num=10;
}
alert(num);
很显然这一句会出错。那么在内部定义的时候如果这样定义:
function readNum(){
num=10;
}
alert(num);
这样的代码就不会出错了,因为在js中使用var修饰的变量是局部的,在函数中不能有外部访问,然而没有使用var修饰的变量是全局的,所有的变量都能访问,那么问题来了,既然外部不能访问用var修饰的局部变量,但是一旦我们有时候需要访问的时候我们怎么办呢?想到的第一个方法就是在函数内部在定义一个函数:
function readNum(){
var num=10;
function alNum(){
alert(num);
}
return alNum;
}
var useAl=alNum;
useAl();
这一点和C语言等语言很类似,就第二个函数属于第一个函数内部,对于第二个函数来讲,num这个变量是相对于他全局的,所以可以访问这个变量,所以这个程序输出的值是10,这一点没有问题。那么当我们要访问这个变量的时候就可以将alNum作为返回值来用。这样我们就实现了在外部使用num变量。
那么!这里的alNum函数就是闭包!然后就是闭包就是使用一个内部函数来给外部一个借口访问内部局部变量,还可以这么理解,就是定义在函数内部的函数,这个函数可以访问到内部的局部变量。
js代码中的闭包的更多相关文章
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
- JS代码中加上alert才能正常显示效果
模拟一个生成验证码的效果,发现JS代码中加上alert可以正常刷新,没有alert时图片就会丢失,找到解决方法,但是还不是很明白,先记录下来. 生成验证码的servlet代码如下: package s ...
- thinkphp在前端页面的js代码中可以使用 U方法吗? 可以使用模板变量如__URL__等吗?
thinkphp在前端页面的js代码中可以使用 U方法吗? : 可以的! tp的U方法, 是"全局的", 什么是全局的? 就是, 可以在 "任何地方"使用的: ...
- m_Orchestrate learning system---三十五、php数据和js数据的解耦:php数据(php代码)不要放到js代码中
m_Orchestrate learning system---三十五.php数据和js数据的解耦:php数据(php代码)不要放到js代码中 一.总结 一句话总结:也就是以html为中介,用html ...
- jsp页面和js代码中使用sessionScope获取session值
场景:有些实体对象可以放到HttpSession对象中,保正在一个会话期间可以随时获取这个对象的属性,例如可以将登录用户的信息写入session,以保证页面随时可以获取并显示这个用户的状态信息.下面以 ...
- 输出JS代码中的变量内容
一. 输出JS代码中的变量内容 1. 可以直接以提示框的形式输出 alert("输出的内容"); 2. 可以输出到网页的某个位置 a. 在显示输出的位置放一个标签 <a id ...
- 如何在 js 代码中使用 jsp 标签或 Java 代码
JSP 标签还是很方便的,比如 Struts.Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算.比如 struts2 的 <s:url value="/a ...
- 关于js代码中与或运算符||&&的妙用
看bootstrap时看到如下一行JavaScript代码产生了疑惑. return window.pageYOffset || e.scrollTop ||在这里的作用是什么呢? 首先明确概念,在j ...
随机推荐
- Mysql:Error Code 1235,This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决 这次国庆节回来后的测试中,在一个Mysql表达式 ...
- [C#] AY.WPF-图形编程-高中生为起点-研究报告1
=========================www.ayjs.net独家拥有,未经许可,不许转载,违者追究法律责任 简单的引入:点的平移与转换 System.Window.Point类的 Off ...
- JAVA自动化测试中多数据源的切换
在做自动化测试时,数据驱动是一个很重要的概念,当数据与脚本分离后,面对茫茫多的数据,管理数据又成了一个大问题,而数据源又可能面对多个,就跟在开发过程中,有时候要连接MYSQL,有时候又要连接SQL S ...
- 用飞信监控GoldenGate进程
监控GoldenGate进程 1) 在goldengate安装目录下建立文件ogginfo $vim ogginfo info all 2) 配置飞信报警 ...
- 文件编辑器 vi
1.关于文本编辑器: 文本编辑器有很多,比如图形模式的gedit.kwrite.OpenOffice ... ... ,文本模式下的编辑器有vi.vim(vi的增强版本)和nano ... ... v ...
- AchartEngine绘图引擎
https://code.google.com/p/achartengine/ Code Test代码: /workspace/AChartEngineTest /workspace/appco ...
- JIT
http://www.cppblog.com/vczh/category/9583.html
- [PaPaPa][需求说明书][V1.0]
前 言 嘿嘿!嘿嘿!嘿嘿嘿嘿!大家好,我是XXX! 经过30K大大几篇文章在博客园怒刷存在感之后,咱们的小群瞬间从70人的数量增加到了将近400人.一下子加进来这么多人我还真是有点不适应啊! 我知 ...
- merge 实现
今天写了个小程序,做两个已经从小到大排序好的数据的merge. 要求: listA = (1, 3, 5, 10); listB = (4, 6, 12):listA 和listB都是排序由小到大的列 ...
- maven eclipse jetty debug
可以通过查看最近版本: http://mvnrepository.com/artifact/org.eclipse.jetty/jetty-server http://search.maven.org ...