学习闭包的一些发现1
来源:互联网 发布:mac网站制作工具 编辑:程序博客网 时间:2024/06/17 13:02
以前说过闭包就是把函数当作返回值,和把函数当作参数,这两种清况就是闭包,那么为什么要把函数当作返回值呢?先看个例子:
function f1(){ var n = 99; } console.log(n); 结果是: n is not defined
但是如果写成下面这种形式:
function f1(){ var n = 99; function f2 () { console.log(n); } return f2; } var result = f1(); result();这样就可以访问到n了
这是因为函数有一个作用域链的问题,具体可以看我写的前面的几篇文章,在函数内部没有的属性,他会一直向上查找,在这里在f1的内部,f2是可以访问到f1的属性的,所以我们就要把f2当作f1的返回值,这样我们就可以在外面访问到f1里面的属性了。
这个就是闭包:把函数定义在另一个函数里面
闭包就是连接函数和外面的一坐桥梁。
先看下面一个例子,然后我们会得出闭包的一个注意要点:
function f1(){ var n = 99; add = function () { n+=1; } function f2 () { console.log(n); } return f2; } var result = f1(); result(); add(); result();
这里的运行结果是99和100,为什么呢?在第一次执行完之后,并没有清除f1和f2的值,而是在内存中保存了下来,因为result是一个全局变量,把f1给了他也就是f2给了他,但是f2的存在是依赖于f1的,所有他们都在内存当中,而add这个因为没有用var声明,所以它是全局变量,指向了一个匿名函数,所以他的执行,会影响n的值。通过以上的分析,我们可以得出:
使用闭包是比较消耗内存的在一般页面使用可以,在是在比较大型的项目,有可能引起网页的性能问题。在ie中有可能导致内存泄漏,解决办法是在退出函数之前,将不使用的局部变量全部清除。
0 0
- 学习闭包的一些发现1
- 学习闭包的一些发现2
- 学习mysql的一些发现
- 关于闭包的一些学习思考
- Xib的一些发现
- OpenCV入门学习现状及期间发现的一些问题
- Groovy学习笔记之关于闭包的一些补充
- 学习 unity过程中的一些笔记和发现(1)
- 一些jar包的作用 --学习了
- 闭包的一些理解
- 桌面窗口的一些发现
- transition的一些问题发现
- 社区发现的一些算法
- 惊艳的一些小发现
- 发现不一样2.闭包
- android 当compile了一些包时,发现有冲突。
- 黑马程序员—我在学习飞行棋的时候发现的一些问题
- 闭包的学习
- ListView的item动画效果
- 使用Xcode和Instruments调试解决iOS内存泄露
- 国外程序员整理的Java资源大全
- abap select-screen
- 格式化 namenode 时出现的 WARN
- 学习闭包的一些发现1
- StatSVN统计SVN中的代码量
- 比较好用的一些软件
- 内核级研究-arm926ejs内核如何控制TCM、Cache、MMU等
- LFS附加版——利用XShell和WinSCP辅助开发
- 用程序员的姿势抢过年的火车票
- 12.IDA-虚函数和虚表
- HDU1372----Knight Moves
- Good Bye 2013 总结