分析javascript关闭
1.什么是闭包
1)官方解释
一个拥有多个变量和绑定了这些变量的环境的表达式(一般是一个函数)。因而这些变量也是该表达式的一部分。
我的理解:所谓的闭包就是连接函数内部和函数外部的一座桥梁。使得在外部也可以訪问到函数内部的变量。
2)闭包的特点
A:作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
B:一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
2.闭包的用途
A:读取函数内部变量
<span style="font-family:SimSun;font-size:18px;">function People(name) {
var name ="张三";
return function () {
alert(name);
}
}
var Job = new People();
Job();</span>
解释:正如上述的代码所看到的,name是定义在People中的函数,是函数People中的局部变量,而我们在外部是无法訪问到的,可是People函数返回了一个内部函数,而这个内部函数是对变量name的一个引用,这就形成了一个闭包,所以在外部也能够訪问到People函数的内部变量(特点一);正如上述代码所看到的,假设name在函数People调用完后不能再訪问的话,则将被释放。而在本例中却被还有一个函数所返回,所以还会包括在栈中(特点二)。
B:保存变量始终在内存中
这也是闭包的不利处之所在地,由于闭包会使得函数中的变量保存在内存中,内存消耗非常大,所以不能滥用闭包。否则会造成网页载入缓慢问题等,解决办法就是在退出函数之前,来销毁不使用的局部变量。
3.思考题
1)样例1
<span style="font-family:SimSun;font-size:18px;">function Test1() {
var a = 0;
function Test2() {
a++;
alert(a);
}
}
Test2();//是错误的。作用域在Test1,外部无法訪问到</span>
2)改动后
<span style="font-family:SimSun;font-size:18px;">function Test1() {
var a = 0;
function Test2() {
a++;
alert(a);
}
return Test2; //改动操作例如以下
}
var obj = Test1();
obj();//返回1
obj();//返回2
var obj2 = Test1();
obj2();//返回1
obj2();//返回2</span>
4.小结
以上就是对闭包的所有理解。简单的一句话:闭包就是搭建外部函数与内部函数的桥梁。
上述仅仅是对闭包的一点点了解。有疑问之处,还请多多指正。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
分析javascript关闭的更多相关文章
- 小技巧——病毒分析中关闭ASLR
原文来自:https://bbs.ichunqiu.com/thread-41359-1-1.html 病毒分析中关闭ASLR 分析病毒的时候,尽可能用自己比较熟悉的平台,这样可以大大地节省时间,像我 ...
- 简单分析JavaScript中的面向对象
初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...
- 从一道面试题分析javascript闭包
据说是一不注意就会做错的五道javascript面试题之一,我们来看看这道题长什么样 function Container( properties ) { var objthis = this; fo ...
- 如何捕获和分析 JavaScript Error
前端工程师都知道 JavaScript 有基本的异常处理能力.我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常.但估计绝大多数前端工程师都没考虑过收集这些异常 ...
- JavaScript关闭窗口的同时打开新页面的方法
做网页的时候需要弹出一个小窗口,然后要实现一个功能就是鼠标点击超链接关闭小窗口并打开一个新页面,就如同下图: 这是一个小窗口,点击超链接这个窗口会关闭并且会正常在浏览器打开新页面,首先写js关闭窗口的 ...
- JavaScript关闭窗口的方法
当你创建了一个新窗口时,将open()方法的返回值分配给一个变量非常重要.比如,下面的语句就是创建一个新窗口,然后立即关闭它: win = window.open("http://www.d ...
- javascript 关闭窗口,弹出新窗口并带有确认关闭对话框解决办法
在很多人眼里,北京是一个物欲横流的社会,生活节奏之快,让你一丝都不能停下来,走在路上伴随着人群急速往前涌,或许有些人都不知道要去哪.也不知道自己想要的是什么?在一个浮躁的社会里,多了一些浮躁的人,到处 ...
- JavaScript关闭浏览器
(*^__^*) 嘻嘻……,以前我找关闭浏览器选项卡的代码找不到,我还以为要用后台代码关呢?今天发现只要简单2句JavaScipt代码就可以了.看来很多东西还是在于平时的积累啊的说! 模仿延儿的口气了 ...
- 简要分析javascript的选项卡和轮播图
选项卡 思路 1.按钮和展示的页面要对应:分别遍历,记住当前按钮的索引,让其成为展示页面的索引 2.只出现所对应的页面:所有的页面隐藏,只展示想要的页面 只展示js代码 for(var i=0;i&l ...
随机推荐
- SQL基础使用
result = executeQuery(“ SELECT FName, FSalary FROM T_Employee ”); for(i=0;i<result.count;i++) { s ...
- LVS--什么是LVS?
1.什么是LVS? 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有很 ...
- Qt核心剖析:信息隐藏(三篇)
http://devbean.blog.51cto.com/448512/335550 http://devbean.blog.51cto.com/448512/325581 http://devbe ...
- ie6下常见的bug 调整页面兼容性
ie6下常见的bug 我们布局页面,首先符合标准,如何写一个页面的标准性? 但是ie6等浏览器本身就比较特殊,bug比较多,兵法云,知己知彼百战百胜.我们需要了解ie6的一些常见bug,这样,更好的调 ...
- Git命令非主流札记
使用git做开发的版本管理也有一年半之多了,但是始终都是常用的branch commit status diff push等一些再常用不过的命令,最近闲下来,打算学习一下高端用法,所以就静下心来好好读 ...
- perl 面向对象 new方法
[root@wx03 test]# cat Scan.pm package Scan; sub new{ my $class = shift; my $self={ 'a'=>11, 'b'=& ...
- JAVA序列化在IO中读写对象的使用
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是为了解决在对对象流进行读写操作时所引发的问题. 序列 ...
- [ACM] HDU 5083 Instruction (模拟)
Instruction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 第十一章 认识与学习BASH
系统支持的shell在 /etc/shells里面 Bash Shell 的功能: 1.命令修补能力(histroy) 2.命令与档案补全功能 3.命令别名设定功能 4.工作前景背景控制 5.支持 ...
- 主题:Java WebService 简单实例
链接地址:主题:Java WebService 简单实例 http://www.iteye.com/topic/1135747 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要 ...