理解js中的闭包
来源:互联网 发布:淘宝的流量钱包自动领 编辑:程序博客网 时间:2024/04/26 02:04
同上篇理解原型一样,我也不想描述太多书本上的概念,闭包可能比原型更难理解,如果看概念,可能你看几个月也不能理解。
如何理解闭包?
首先,我认为,闭包的作用,简单的说,就是保存函数的局部变量。这该如何理解呢?
我觉得,这要分两点来解释:
1.保存局部变量的问题。java中的局部变量,是用的堆栈模型,所以在java里,局部变量,是不能在作用域外部访问到的,而js中则不同,js中是使用作用域链这个模型去保存变量的,具体啥叫作用域链,笔者也解释不清楚,以前看Js权威指南时候看过,但是长时间不用,不去翻这个概念,现在已经忘得一干二净,只知道作用域链这个名词了,但是不影响闭包概念的理解。
2.如何访问函数的局部变量。
function counter () { var i = 0; }
尝试在外面访问counter这个对象,
可以看到,直接访问是不行的。那么试试下面这段代码:
function counter () { var i = 0; return function () { return i; } }尝试在浏览器上这么访问:
这样就可以访问到局部变量i了,此时counter已经是一个闭包了,是不是很神奇!
闭包的作用
会写闭包,但是不知道用在什么地方,不知道咋用,等于没有理解。
1.闭包可以模拟私有方法,限制代码的访问。
function counter () { var i = 0; function a() { i++; } return function () { return i; } }
比如a方法,外部是访问不到的,可以自己试试。
2.管理全局命名空间,避免污染全局作用域。
闭包的主要作用就是上面2个,但是,这2个作用,我们怎么用到实际的开发当中呢??答案,写js插件。笔者在做面试官的时候,当我问闭包的问题时,只要他能回答出来写插件的时候用,我觉得他算是理解闭包了。
0 0
- 理解js中的闭包
- 理解js中的闭包
- 理解js中的闭包
- 理解js中的闭包
- 深入理解js中的闭包
- js中的闭包之我理解
- js中的闭包之我理解
- js中的闭包之我理解
- js中的闭包之我理解
- js中的闭包之我理解
- js中的闭包之我理解
- js中的闭包之我理解
- 彻底理解js中的闭包
- 理解js闭包
- JS 闭包理解
- js闭包理解
- js闭包理解
- js闭包理解
- Writing Loadable Kernel Modules using netfilter hooks (in-depth HOWTO) – Part 1
- [原创]CentOS6.0系统下安装配置openCV成功
- 全球首款工业物联网芯片渝“芯”一号在渝发布
- SQL 其他问题
- IT男们,先别慌着coding了,看看了中国又发生了什么吧
- 理解js中的闭包
- 认清经济大形势,别让我们辛苦code来的财富一再缩水
- [原创]通过SSH登录Linux服务器很慢,且服务器提示Access Denied时的解决方案
- C++多态性机制初探
- 多线程 —— 代码安全以后,对线程调度的控制(等待-唤醒机制)
- (一)洞悉linux下的Netfilter&iptables:什么是Netfilter?
- (二)洞悉linux下的Netfilter&iptables:内核中的ip_tables小觑
- (三)洞悉linux下的Netfilter&iptables:内核中的rule,match和target
- (四)洞悉linux下的Netfilter&iptables:包过滤子系统iptable_filter