函数和对象都是复杂的引用数据类型。
函数的私有变量和对象的属性相似,私有变量其实就是函数调用对象的属性
函数有可执行的环境(上下文环境),对外不可见
对象的上下文是静态的,对外是可见的
如果说对象是数据存储结构,那么函数就是代码执行空间,对象更像仓库,函数则更像加工车间
函数:
function f(){ // 函数结构
var a=1 ; //函数局部变量
var b=funciton(){ //函数内部的方法
retrun a
}
}
对象:
o={ // 对象结构
a:1 , //对象属性
b:function(){ //对象属性
return a
}
}
保护闭包数据的独立性
在一个循环结构中通过闭包来自动更改一个数组内所有元素的值(li点击事件)
var a=[1,2,3];
for ( i in a){
a[i]=function(i){
return function(){
return i*i
}
}(i)
}
多一层闭包将增加内存的消耗,每次遍历中,多定义的闭包结构都属于不同的函数实例,既然属于不同的结构体,我们可以把这个局部变量值交给函数实例自己保存,从而减少一层闭包,减轻系统负担
var a=[1,2,3];
for ( i in a){
a[i]=function(){
var i=arguments.calle.value; // 获取匿名函数的属性value值
return i*i;
}
a[i].value=i;//设置匿名函数的属性value值 为局部变量i
}
for(i in o){ o[i].onclick=function(){}}//事件属性赋值必须使用闭包