闭包

来源:互联网 发布:flash框架python 编辑:程序博客网 时间:2024/04/30 09:30

1.定义:定义在一个函数内部的函数,读取局部变量,将函数内部和函数外部连接起来的一座桥梁

(主要是两个作用:(1)读取函数内部的局部变量的值,(2)将局部变量保存在内存中

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);


0 0
原创粉丝点击