作为一个后台开发人员了解前端非常重要,尤其是深处学校实验室做项目时前端把写好的代码直接给你,然后你在修改的时候。我经常做的就是修改前端的代码的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代码中的闭包的更多相关文章

  1. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  2. jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...

  3. JS代码中加上alert才能正常显示效果

    模拟一个生成验证码的效果,发现JS代码中加上alert可以正常刷新,没有alert时图片就会丢失,找到解决方法,但是还不是很明白,先记录下来. 生成验证码的servlet代码如下: package s ...

  4. thinkphp在前端页面的js代码中可以使用 U方法吗? 可以使用模板变量如__URL__等吗?

    thinkphp在前端页面的js代码中可以使用 U方法吗? : 可以的! tp的U方法, 是"全局的", 什么是全局的? 就是, 可以在 "任何地方"使用的: ...

  5. m_Orchestrate learning system---三十五、php数据和js数据的解耦:php数据(php代码)不要放到js代码中

    m_Orchestrate learning system---三十五.php数据和js数据的解耦:php数据(php代码)不要放到js代码中 一.总结 一句话总结:也就是以html为中介,用html ...

  6. jsp页面和js代码中使用sessionScope获取session值

    场景:有些实体对象可以放到HttpSession对象中,保正在一个会话期间可以随时获取这个对象的属性,例如可以将登录用户的信息写入session,以保证页面随时可以获取并显示这个用户的状态信息.下面以 ...

  7. 输出JS代码中的变量内容

    一. 输出JS代码中的变量内容 1. 可以直接以提示框的形式输出 alert("输出的内容"); 2. 可以输出到网页的某个位置 a. 在显示输出的位置放一个标签 <a id ...

  8. 如何在 js 代码中使用 jsp 标签或 Java 代码

    JSP 标签还是很方便的,比如 Struts.Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算.比如 struts2 的 <s:url value="/a ...

  9. 关于js代码中与或运算符||&&的妙用

    看bootstrap时看到如下一行JavaScript代码产生了疑惑. return window.pageYOffset || e.scrollTop ||在这里的作用是什么呢? 首先明确概念,在j ...

随机推荐

  1. [UWP]一种利用Behavior 将StateTrigger集中管理的方案

    不做开篇废话,我们发现: AdaptiveTrigger 不够好 我们知道,UWP可以在一个页面适应不同尺寸比例的屏幕.一般来说这个功能是通过官方推荐的AdaptiveTrigger 进行的. 比如这 ...

  2. OpenCV】透视变换 Perspective Transformation(续)

    载分 [OpenCV]透视变换 Perspective Transformation(续) 分类: [图像处理] [编程语言] 2014-05-27 09:39 2776人阅读 评论(13) 收藏 举 ...

  3. SSIS连接Oracle遇到的问题

    Fuck!一大早上来到办公室发现 E盘被客户无缘无故干掉了,心中一万只......路过,but  接下来还是要解决问题 冷静!冷静!冷静! 问题还是要解决的 于是乎去测试开发环境 发现DW库和Repo ...

  4. CentOS 伪装安装TSA for DB2

    DB2 HADR需要额外安装TSA,正常情况下CentOS无法通过安装前验证.会报一个说发行版不支持的错误. 可以通过伪装成RHEL的方式使得正常安装. 修改方式如下 修改/etc/system-re ...

  5. Windows 8 图标前面的勾选

    http://bbs.pcbeta.com/viewthread-999730-1-1.html 不管是桌面的图标还是资源管理器中的图标之前都出现了一个小小的方框.选中图标的时候会自动勾选那个框,如果 ...

  6. javascript - 二叉树

    都是些简单的东西,所以直接上代码了. /** * Created by huangjacky on 14-10-3. */ function Node(element, left, right) { ...

  7. Android开发贴士集合

    Activity.startActivities()——对于从app流的中部启动会非常好. TextUtils.isEmpty()——一个普遍适用的简单工具类. Html.fromHtml()——格式 ...

  8. [原创]自定义view之:快速开发一款Material Design风格的dialog的开源项目MDDialog

    随着google开始主导Material Design风格的设计,越来越多的app开始使用Material Design风格来设计自己的UI.虽然在Android Studio中集成了多种快速开发框架 ...

  9. 在GridView中使用radioButoon

    在GridView中使用radioButoon 方法一: <input type="radio" id='radioSelectFeed' name="radioD ...

  10. 关于mvc、webapi中get、post、put、delete的参数

    webapi中post提交的数据必须是一个类,get提交的数量无所谓 多种参数get时,参数名不能相同: 在能通过c#的校验的前提下,参数名.参数数量不能全完相同 public string Get( ...