- 浏览: 7185220 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (397)
- 架构研究 (44)
- 网络协议-TCP/HTTP (20)
- SPRING (23)
- HIBERNATE 3 (30)
- STRUTS 2 (20)
- Java/J2se (25)
- Servlet/Jsp (9)
- 开发工具IDE (10)
- WEB服务器 (17)
- 前端--Java Script (33)
- 前端--CSS (7)
- OS--Linux (31)
- OS--MAC OS (19)
- MySQL数据库 (19)
- Oracle数据库 (11)
- 项目管理工具 (12)
- 数据报表技术 (4)
- 图像处理技术 (10)
- 其它综合技术 (13)
- 权限管理 (1)
- MyBatis (1)
- 网络安全 (6)
- IO (21)
- PostgreSQL (2)
- Eclipse RCP (1)
- GWT (1)
- 算法 (3)
- Storm (2)
- zookeeper (3)
- 消息 (1)
最新评论
-
bukebuhao:
已解决,打开文件太多。ulimit -n 上次临时生效后再次s ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
bukebuhao:
ds重启后启动不了。报错信息如下,请大神帮助[2018-08- ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
墨上清:
感谢,看完有了一个完整的知识网络。
Spring MVC 教程,快速入门,深入分析 -
云卷云舒灬:
谢谢,学到很多
Spring MVC 教程,快速入门,深入分析 -
luozhy:
非常感谢非常感谢
Project Web Access ActiveX控件 安装
function outerFun() { var a=0; function innerFun() { a++; alert(a); } } innerFun()
上面的代码是错错误的.innerFun()的作用域在outerFun()内部,所在outerFun()外部调用它是错误的.
改成如下,也就是闭包:
function outerFun() { var a=0; function innerFun() { a++; alert(a); } return innerFun; //注意这里 } var obj=outerFun(); obj(); //结果为1 obj(); //结果为2 var obj2=outerFun(); obj2(); //结果为1 obj2(); //结果为2
什么是闭包:
当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.
--------------------------------------------------------------------------------------------------------
再来看一个例子
function outerFun() { var a =0; alert(a); } var a=4; outerFun(); alert(a);
结果是 0,4 . 因为在函数内部使用了var关键字 维护a的作用域在outFun()内部.
再看下面的代码:
function outerFun() { //没有var a =0; alert(a); } var a=4; outerFun(); alert(a);
结果为 0,0 真是奇怪,为什么呢?
作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 .当执行a=0时,因为没有使用var关键字,因此赋值操作会沿着作用域链到var a=4; 并改变其值.
评论
44 楼
shuaijie506
2009-09-18
闭包的这个还是第一次听说,长见识了。
作用域那个早就知道,还是自己试出来的,现在每用一个变量我都要var 定义,要不就会改变其它的值了。(for循环里的i最为明显,不明白的人可以写一个循环,在循环里调用另一个方法,在这个方法也也使用循环,循环变量都用i,你就会见到一个神奇的结果)
作用域那个早就知道,还是自己试出来的,现在每用一个变量我都要var 定义,要不就会改变其它的值了。(for循环里的i最为明显,不明白的人可以写一个循环,在循环里调用另一个方法,在这个方法也也使用循环,循环变量都用i,你就会见到一个神奇的结果)
43 楼
johnicesea
2009-09-17
hanjs 写道
从最后的例子看
outerFun可以引入外部的变量,而函数块内部的变量如果与外部同名而且用var重定义了,说明是函数的内部变量,否则引入的则是outerFun所在作用预的同名变量.
outerFun可以引入外部的变量,而函数块内部的变量如果与外部同名而且用var重定义了,说明是函数的内部变量,否则引入的则是outerFun所在作用预的同名变量.
这样的话我就明白了
42 楼
hlislichking
2009-09-12
cocococoon 写道
Army 写道
最后一个例子还是不太明白,var声明不是被提前了么?
稍微修改一下最后一个例子的代码你就明白了:
function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 } var a=4; outerFun(); alert(a);
还用一个例子你可能就更能理解了
function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 } outerFun(); //函数位于var定义变量之前 var a=4; alert(a);
这样的话就会报错,因为执行函数时,才会根据作用域需找定义的变量,此时的变量a还未定义
41 楼
koalaxyq
2009-09-01
Jamson 写道
<script>
function outerFun()
{
var b=0;
function innerFun()
{
a=1;
alert(a);
}
return innerFun; //注意这里
}
var obj=outerFun();
obj(); //结果为1
obj(); //结果为2
alert(outerFun.b); //结果为undefined
alert(obj.b); //结果为undefined
</script>
有人能为我解释一下:最后两个为什么是undefined嘛?
Jamson 写道
obj(); //结果为1
obj(); //结果为2
结果都应为1
Jamson 写道
<
alert(outerFun.b); //结果为undefined
alert(obj.b); //结果为undefined
alert(outerFun.b); //结果为undefined
alert(obj.b); //结果为undefined
因为outerFun是函数,obj是对函数的引用,b是函数内部的局部变量
不能像对象引用属性那样来引用它,也不可能
因而outerFun.b与obj.b都是undefined的
40 楼
Jamson
2009-08-19
<script>
function outerFun()
{
var b=0;
function innerFun()
{
a=1;
alert(a);
}
return innerFun; //注意这里
}
var obj=outerFun();
obj(); //结果为1
obj(); //结果为2
alert(outerFun.b); //结果为undefined
alert(obj.b); //结果为undefined
</script>
有人能为我解释一下:最后两个为什么是undefined嘛?
function outerFun()
{
var b=0;
function innerFun()
{
a=1;
alert(a);
}
return innerFun; //注意这里
}
var obj=outerFun();
obj(); //结果为1
obj(); //结果为2
alert(outerFun.b); //结果为undefined
alert(obj.b); //结果为undefined
</script>
有人能为我解释一下:最后两个为什么是undefined嘛?
39 楼
geke260
2009-04-27
http://www.iteye.com/wiki/Object_Oriented_JavaScript/1317-javascript-object-oriented-technology-6
这里讲的比较详细。。。
这里讲的比较详细。。。
38 楼
peanut_sei
2009-04-23
shinelgz 写道
没有用var 声明的局部变量,都视为全局变量
function test(){
i = 10;//全局变量
}
var i = 0;
test();
alert(i);//out: 10
上面这个函数就是闭包了。
function test(){
i = 10;//全局变量
}
var i = 0;
test();
alert(i);//out: 10
上面这个函数就是闭包了。
同意。
37 楼
jsnjlc
2009-04-22
民工精髓 写道
cocococoon 写道
Army 写道
最后一个例子还是不太明白,var声明不是被提前了么?
稍微修改一下最后一个例子的代码你就明白了:
function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 } var a=4; outerFun(); alert(a);
改成这样也许更容易理解,函数的声明在前在后没有关系,只跟调用有关
var a=4; outerFun(); alert(a); function outerFun() { alert(a); // got 4 a =0; alert(a); // got 0 }
改完后outerFun还没有声明呢,是undefined,js是一块块的按顺序解释执行。
36 楼
diipo_xiao
2009-04-21
感觉就是还是按照行执行代码,只不过遇到函数的时候就继续,遇到没有var定义的变量,则联系上下文查找var。说明对var的处理优先级很高。
35 楼
我的马甲
2009-04-20
终于可以发贴了..
34 楼
orcl_zhang
2009-04-14
javaeys上有一篇关于js的面向对象的讲解,还有《悟透JavaScript》资料,结合起来看,看完后就会茅塞顿开。
33 楼
sniperking
2009-04-13
学习了,有了一个大概的了解,这个和平常的程序里的闭包概念差不多
32 楼
alex09
2009-04-12
histan 写道
可以给详细相关资料吗?
知识库中的javascript面向对象技术基础有六讲,非常不错,可以去看下的
31 楼
histan
2009-04-10
可以给详细相关资料吗?
30 楼
aninfeel
2009-04-05
定义时和运行时分开,就好懂了。
29 楼
bsq519
2009-04-01
至于最后一个问题。其实就是一个变量作用域的问题。有全局变量,和局部变量。
28 楼
yangtse_ye
2009-03-31
最后一个例子无关闭包这个概念吧
只是跟代码的解析/执行顺序,以及变量的作用域有关
看一下犀角书,理解起来不难的应该
只是跟代码的解析/执行顺序,以及变量的作用域有关
看一下犀角书,理解起来不难的应该
27 楼
chris_zley
2009-03-25
看明白了,就是个变量作用域的关系
最后那个a开始是赋值为4了,后来进入outerFun,赋值为0就改变了全局作用域的a,所以下面也是0
但下面两个例子和前两个例子有什么关系呢。。闭包一般用在什么场合?
最后那个a开始是赋值为4了,后来进入outerFun,赋值为0就改变了全局作用域的a,所以下面也是0
但下面两个例子和前两个例子有什么关系呢。。闭包一般用在什么场合?
26 楼
kimmking
2009-03-25
1、JavaScript按块来解释执行
2、同一块中,function前后顺序没有关系
3、全局变量的问题,请看hax大神blog的有奖问答帖~~
2、同一块中,function前后顺序没有关系
3、全局变量的问题,请看hax大神blog的有奖问答帖~~
25 楼
丁丁豆
2009-03-25
这不就是一个全局变量和局部变量的问题吗,在实际中应用的不多,所以自我感觉没有必要掌握,只应学习拓展
发表评论
-
HttpServletRequestWrapper 用法
2014-02-14 22:15 14727Servlet规范中所引入的filter令人心动不已,因为它引 ... -
javascript常用 正则
2010-06-14 16:42 2188javascript身份证号验证 正则 //这个可以 ... -
javaScript 计算网页内容的宽与高 (浏览器的标准模式与怪异模式)
2010-01-06 15:07 4390标准模式与怪异模式 ... -
iframe高度自适应、载入完成事件
2009-09-14 17:40 8755高度自适应 ------------------------ ... -
12 ADS.js库(第二版本)
2009-05-11 10:07 3390前面的 第11篇文章 用到了这个版本的ADS.js / ... -
11 自己的JS调试工具 myLogger()对象
2009-05-11 09:58 2260/** * @author elf */ funct ... -
10 javaScript的异常处理 try{ }catch(theException){ }
2009-05-03 15:04 1874例子: try { //一个异常在这里产生 ... -
9 通过call()和apply()重新定义执行环境
2009-05-03 15:02 1704通过前面学习,已知道this对象的环境是如何随着函数被赋值给其 ... -
8 this是什么
2009-04-26 14:55 1974this在javascript中 情况是不同与java c+ ... -
7 编写类
2009-04-25 20:19 1471以前写过类似的例子, 见http://elf8848.itey ... -
6 继承
2009-04-25 19:45 1597javascript 中没有从一个类扩展出另一个类的底层类结构 ... -
5 迭代对象
2009-04-25 19:23 1439我们常用到for循环 var list=[5,6,7, ... -
4 没有重载
2009-04-25 19:11 1609关于"重载"的概念, 就不用说了. ... -
3 创建自己的库 ADS.js(第一版本)
2009-04-25 18:43 3013伪命名空间的使用. 在javascript2.0广泛使 ... -
2 不要检测版本,要检测对象
2009-04-25 13:09 1517为了编写能兼容各种浏览器的 javascript ,我们可能首 ... -
1 在html中包含javascript
2009-04-25 11:10 5522方法一: 通过外部源文件来包含javascript,这是最正 ... -
常用的JS-备份
2009-03-20 08:46 2696我常用 的HTML 类型<!DOCTYPE html ... -
DOM 删除节点
2009-03-13 17:48 3373removeChild() 方法删除指定节点。 ... -
如何使用定时器settimeout、setInterval执行能传递参数的函数
2009-03-11 19:03 15481无论是window.setTimeout还是window.se ... -
JavaScript函数参数个数
2009-03-11 18:51 4011<html><head><met ...
相关推荐
JavaScript 闭包是一种强大的编程工具,常常被用来解决特定的问题和优化代码结构。在JavaScript中,闭包是指一个函数能够访问并操作其定义时的作用域内的变量,即使该函数在其外部作用域被调用。以下将详细介绍两个...
### JavaScript闭包的理解 在JavaScript中,闭包(Closure)是一种非常重要的概念,它涉及到函数作用域、变量生命周期以及函数内部对外部作用域的访问等多个方面。本文将基于提供的文件内容,深入探讨JavaScript...
### JavaScript闭包完整解释 #### 一、闭包的基本概念 **闭包**是一个非常重要的JavaScript概念,它指的是一个函数能够记住并访问其外部作用域中的变量的能力,即使该函数在其外部作用域之外被调用也是如此。具体...
### JavaScript闭包详解 #### 一、闭包概念与特性 **闭包**是JavaScript语言的一个重要特性,它使得函数可以访问并操作其外部作用域内的变量,即使该函数在其外部作用域之外被调用。要理解闭包,首先需要了解...
在这个“js闭包理解之倒计时”的主题中,我们将深入探讨如何利用闭包实现一个实际项目中的倒计时功能。 首先,让我们了解一下闭包的基本概念。在JavaScript中,每当函数被创建时,它都会形成一个闭包,这个闭包包含...
以下是一些关于JavaScript闭包的关键知识点: 1. **函数嵌套**:闭包最常见的形式是内部函数引用了外部函数的变量。例如: ```javascript function outerFunction() { var outerVar = 'I am from the outer ...
Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态...本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。
JavaScript 闭包研究及典型应用 JavaScript 闭包是一种强大的技术,能够在各种场景中发挥重要作用。本文将介绍 JavaScript 闭包的定义、使用场景和典型应用。 闭包函数的定义和使用场景 在 JavaScript 语言中,...
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
总之,JavaScript闭包是理解和编写高效、模块化代码的关键概念,它能帮助我们更好地管理作用域、变量和内存,从而提高代码的复用性和可维护性。在日常开发中,熟练掌握闭包不仅可以提升编程技能,也能让代码更加优雅...
基于JavaScript闭包的Web图片浏览控件的实现 本文主要讲解了基于JavaScript闭包原理的Web图片浏览控件的实现,包括JavaScript闭包概念、闭包应用场景、Web图片浏览控件的设计思路和实现方法。 1. JavaScript闭包...
资源名称:javascript闭包详解 中文word版 内容简介: Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C 的程序员来说是一个新的...
闭包是JavaScript中实现数据隐藏和封装的一种重要手段,对于理解和编写高效的JS代码至关重要。 1. **作用域的理解** - **全局变量**:在整个程序中都可访问的变量,它们在整个脚本的生命周期内都存在。 - **局部...
JavaScript中的闭包是一种强大的特性,它允许函数访问和操作其外部作用域内的变量,即使在外部函数执行完毕后,闭包依然能保持对外部变量的访问。闭包的关键在于,它能够保留函数内部状态,使得数据得以持久化,这...
标题《JavaScript闭包的理解》涉及的知识点主要围绕JavaScript编程中的一个重要概念——闭包。闭包是一个高级且复杂的话题,它是JavaScript语言的核心特性之一,同时也是一大难点。要想熟练运用JavaScript,掌握闭包...
在这个场景中,我们讨论的是一个名为"layer.rar"的压缩包,它包含了一个利用JavaScript闭包技术封装的提示模态框。这个模态框设计得既适应PC设备,也能在不同分辨率的设备上良好运行,体现了响应式设计的概念。 ...
在深入讨论JavaScript闭包之前,首先需要了解JavaScript的变量作用域。在JavaScript中,变量的作用域分为两种:全局变量和局部变量。全局变量是在函数外部定义的变量,可以在JavaScript程序的任何地方被访问。局部...
JavaScript 闭包是一种高级编程概念,它在JavaScript中扮演着至关重要的角色,特别是在函数式编程和模块化设计中。闭包本质上是函数和其能够访问...通过学习这些实例,你将能够更好地掌握JavaScript闭包这一核心概念。
JavaScript 闭包是一种强大的特性,它允许函数访问和操作其外部作用域的变量,即使在其外部函数执行完毕后,闭包依然能保持对外部变量的访问。闭包的关键在于内部函数能够记住它被创建时的环境,即它可以访问定义在...
### 什么是JS闭包 #### 一、变量的作用域与闭包的基础 在JavaScript中,理解闭包之前,首先需要掌握变量的作用域概念。变量的作用域主要分为两种:全局变量和局部变量。全局变量在整个程序范围内都可以访问,而...