闭包
来源:互联网 发布:flash框架python 编辑:程序博客网 时间:2024/04/30 09:30
1.定义:定义在一个函数内部的函数,读取局部变量,将函数内部和函数外部连接起来的一座桥梁
var testClosure = function(){
var n = 12;
a = 10;//全局变量
nAdd = function(){
n++;
}//全局函数
var innerClosure = function(){
alert(n);
}
return innerClosure;
}
var c = testClosure();
c();
nAdd();
c();
首先在nAdd前面没有使用var关键字,因此
nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数(anonymous function),而这个
匿名函数本身也是一个闭包,所以nAdd相当于是一个setter,可以在函数外部对函数内部的局部变量进行操作。
2.变量的删除(delete)
如果用var定义的变量,属于window里,delete不起作用(应该是依赖于window的缘故),得var ss = "ff"; ss = undefined;
如果没用var定义 ss = “fff”;delete ss;是可以删除的,eval("var testEval = 'eval'"); delete testEval;这样是可以删除的;var ff = function(){} ff.prototype={bar:123};delete ff.bar是不能删除的;var ss = {bar:123};delete ss.bar;---是可以删除的(bar属性是依赖于ss的,而ss是依赖于window的,应该是这样的)
3.javascript对象继承---原型
由于所有的实例对象共享同一个prototype对象,那么从外界看起来,prototype对象就好像是实例对象的原型,而实例对象则好像"继承"了prototype对象一样(为了公用属性而设计的)
var person = function(name,id){
this.name = name;
this.id = id;
}
person.prototype.dept = "技术部";//person.prototype = {dept:"技术部"}
var p1 = new person("张山","1");
var p2 = new person("李四","2");
console.log("姓名:"+p1.name+",编号:"+p1.id+",部门:"+p1.dept);
console.log("姓名:"+p2.name+",编号:"+p2.id+",部门:"+p2.dept);
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- Anagrams by Stack(进栈出栈问题)
- Jsp org.apache.jasper.JasperException
- 06分布式数据仓库 HIVE -- 数据的查询(HQL Hive Query Language)
- 枚举与位运算
- 编解码技术学习网站
- 闭包
- Android 通知之 Notification
- 引用作形参(2)
- 谷歌自动驾驶汽车定型 明年将上路测试
- Drupal 字段验证小知识
- Xamarin System.Exception与Java.Lang.Exception之间需要主要的地方
- linux下创建用户
- android基础笔记——广播接收者,实现短信监听
- NET三层架构开发初步