文档章节

javascript中关于函数内部变量的调用方法(闭包)

 恐空控
发布于 2013/08/19 21:24
字数 492
阅读 3821
收藏 8

      闭包(closure)是Javascript的特色,很多高级应用都要依靠闭包实现。
      首先必须理解Javascript变量作用域。全局变量和局部变量。函数内部能够读取全局变量,但是在外部无法读取函数内部变量。而闭包就是解决外部得到函数内的局部变量。

闭包的用途
1、读取函数内部的变量;
2、让函数内部的变量的值始终保持在内存中。

在下面的代码中我将详细说明闭包的用法和我的一些理解

<!DOCTYPE html>
<html>
<head>
    <title>javascript中关于函数内部变量的调用方法(闭包)</title>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
</head>
<body>
     <script type="text/javascript">
         function house(){
             var num=1;//房子内人的个数;
             addNum=function(){   //预留的增加函数人数的方法;
                 num+=1;
             }
             function query(){//这个函数就叫闭包
                 alert(num);
                 return num;//返回这个房子的人数
             }
             return query;//返回查询这个房子人数方法的指针及地址;
         }
         var res=house();//将这个房子的查询方法的指针/地址赋给变量res;
         res();//查询房子里面的人数  num=1;
         addNum();//增加房子内人的个数;
         res();//num=2
         //--所谓闭包可以这样理解:我们可以将 function比喻成 var 那么house()就相当于一个全局变量
         //num相当于house()这个全局变量的一个结构,addNum相当于一个改变house()这个全局变量部分结构的方法,
         //query()相当于house()中查询房子内部num结构的方法,因为house()相当于一个全局变量,那么它内部的
         //所以house()的结构也就相当于是全局变量。所以通过addNum()改变num值时num的变化会被保存下来,下次
         //再通过res这个指针访问house()时 num的值是已经改变后的。
     </script>
</body>
</html>

© 著作权归作者所有

粉丝 10
博文 22
码字总数 7160
作品 0
成都
私信 提问
加载中

评论(1)

g8up
g8up
闭包,可不可以理解为,内部函数的作用域链的缓存~
javascript深入理解js闭包

一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量...

Yamazaki
2012/06/15
16
0
前端开发JavaScript干货知识点汇总

很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的...

WEB开发阿靖
06/26
0
0
深入理解JavaScript闭包

一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量...

柯楠
2012/11/02
208
0
javascript闭包 js闭包理解 高级JS程序员的必经之路。

一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量...

樱花泪
2014/01/27
77
0
用垃圾回收机制解释JavaScript中的闭包

说起javascript中的闭包,首先要知道为什么会存在闭包,其作用又是什么。且为什么闭包中就能让外层函数的变量始终保存呢?下面我们将从这两个角度去剖析它。当然,大神绕道,谢谢哈。 开门见...

_呜啦啦啦火车笛
01/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

会用python把linux命令写一遍的人,进大厂有多容易?

看过这篇《2000字谏言,给那些想学Python的人,建议收藏后细看!》的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。 文章中我就提到如何提升自己的 python 能力...

上海小胖
20分钟前
6
0
HashMap的特性

一、hashmap数据结构:哈希表结构:数组+链表 hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数, int hash = hash(key.hashCode...

GGbird
21分钟前
16
0
第五章 spring-connet之Imports注解来龙去脉

前言 imports是一个在spring体系里非常重要的注解,基本每个Enable开头的注解必然有一个import注解。接下来我们深入研究下import的作用。看小节的同学建议先取看PostProcessorRegistrationDe...

鸟菜啊
24分钟前
4
0
CentOS部署Harbor镜像仓库

关于Harbor Harbor是用于存储和分发Docker镜像的镜像仓库服务,相比Docker Registry,Harbor在安全、标识、管理等方面做了增强,更适合企业使用; 官方网站:https://goharbor.io/ 官方开源:...

程序员欣宸
29分钟前
5
0
JavaScript调试必会的8个console方法

每个JavaScript开发者都用过console.log()来调试程序,但实际上Console对象还提供了很多其他方法可以提高调试效率。本文将介绍8个有趣的Console方法,即使JavaScript老手也不一定知道! 1、c...

汇智网教程
50分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部