javascript闭包的秘密
作者:grace 来源:gracecode.com 发布时间:2008-09-28 20:39:00
标签:闭包,函数,javascript
Javascript 中的闭包其实很改语言中很难理解的一部分。感谢 Stuart 提供了那么棒的 PPT,它深入浅出的解释了 Javascript 的闭包技术。
而我“自作主张”地在这份 PPT 中加入了部分的注释(希望没有影响阅读),主要的内容在这里简要整理下。
闭包的概念
“官方”的解释
“闭包”,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
但不要咬文嚼字,我们简单的可以理解为
闭包是个函数,而它“记住了周围发生了什么”。表现为由“一个函数”体中定义了“另个函数”
function outer () {
...
function inner () {
...
}
}
闭包的作用
setTimeout/setInterval
回调函数(callback)
事件句柄(event handle)
模块化代码
function Container(param) {
var sercert = 3;
this.member = param;
var that = this; // 注意这行
function dec() {
return (sercert > 0) ? --secret : false;
}
this.service = function() {
return (dec()) ? that.member : null;
}
}
其中 dec 为私有,that 变量引用 Container 同时 service 函数构成了个闭包。
注意 Exploer 下闭包的“特殊情况”
循环问题
垃圾回收
0
投稿
猜你喜欢
- django-admin基本介绍Django 提供了基于 web 的管理工具。Django 自动管理工具是 django.contrib 的
- #!/usr/bin/env python import os, sys, time while True: time.sleep(3) t
- 因为正则不够完善,所以代码中不能直接出现 <? 和 ?>如果是字符串,可以拆开写 "<" + &quo
- 前言大家好!这个系列文章是W3CN 阿捷编写的。是一些制作过程中的心得和经验,希望对大家有点帮助。第一天开始制作符合标准的站点,第一件事情就
- 效果图:基于d3-v5, 依赖dagre-d3, 直接上代码:<!DOCTYPE html><html lang=&quo
- 简单的说,GUI编程就是给程序加上图形化界面.python的脚本开发简单,有时候只需几行代码就能实现丰富的功能,而且python本身是跨平台
- XSL(EXtensible Stylesheet Language)它是指可扩展样式表语言。 XSL之于 XML 就像 CSS 之于 HT
- 背景环境:ArcGis10.2.2。C#开发程序一直以来以调用Desktop的python环境(32位)来做数据处理分析。但是数据量大时,出
- 在大型的ASP项目中,很多的页面都涉及到分页、翻页功能。如果每个页面都写一个翻页的程序的话,这样的工作即降低了工作效率,也不利于工程的模块化
- 1. $.each(array, [callback]) 遍历[常用] 解释: 不同于例遍 jQuery 对象的 $.each() 方法,此
- 大家好,使用 Python Flask 创建 URL 缩短器是一个有趣而简单的项目,可以帮助您深入了解 Web 开发的世界。Flask 是
- 一 、MySQL版本查询1)登录mysql首先Window+R然后在命令行里输入mysql -u此处填你的mysql账号(注意要加-u) -
- 前言需要导入以下包,没有的通过pip安装import matplotlib.pyplot as pltimport cv2from PIL
- 在事务性语句执行过程中,服务器将会进行额外的处理,在服务器执行时多个事务是并行执行的,为了把他们的记录在一起,需要引入事务缓存的概念。在事务
- 前言其实有一个模块也支持执行系统命令,那个模块就是sys.system,但他执行系统命令会直接通过主进程去执行命令,那假如,该命令的执行需要
- 起因修改了表结构以后执行python3 manage.py migrate 报错:django.db.utils.OperationalEr
- 在这里我们将介绍的是MySQL内存使用上的线程独享,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据,如线程栈信息,分组排序操作,
- 介绍Go使用goroutines来处理connection的读写事件,不会阻塞:c, err := srv.newConn(rw) &nbs
- tcp粘包产生的原因这里就不说了,因为大家能搜索TCP粘包的处理方法,想必大概对TCP粘包有了一定了解,所以我们直接从处理思路开始讲起tcp
- 在之前的一篇文章我们已经介绍过替换python字典中的key值方法 ,本篇文章将作为那篇文章的补充。使用 dict.update() 方法替