js闭包学习心得总结
首先引用来自官网文档的定义:
closureisthecombinationofafunctionandthelexicalenvironmentwithinwhichthatfunctionwasdeclared.
闭包是一个函数和其内部公开变量的环境的集合.
简单而言,闭包=函数+环境
第一个闭包的例子
functioninit(){
varname='Mozilla';//nameisalocalvariablecreatedbyinit
functiondisplayName(){//displayName()istheinnerfunction,aclosure
alert(name);//usevariabledeclaredintheparentfunction
}
displayName();
}
init();
becauseinnerfunctionshaveaccesstothevariablesofouterfunctions,displayName()canaccessthevariablenamedeclaredintheparentfunction,init().
其实这个栗子很简单,displayName()就是init()内部的闭包函数,而为啥在displayName内部可以调用到外部定义的变量name呢,因为js内部函数有获取外部函数中变量的权限。
第二个例子
vardata=[
{'key':0},
{'key':1},
{'key':2}
];
functionshowKey(){
for(vari=0;i
上面这个例子可以正确输出101112吗?
答案是:并不能,并且还会报语法错误....
console.log(i);发现i输出了3次3,也就是说,在setTimeout1000毫秒之后,执行闭包函数的时候,for循环已经执行结束了,i是固定值,并没有实现我们期望的效果。
console.log(this);发现this指向的是Window,也就是说,在函数内部实现的闭包函数已经被转变成了全局函数,存储到了内存中。
所以需要再定义一个执行函数
vardata=[
{'key':0},
{'key':1},
{'key':2}
];
functionshowKey(){
varf1=function(n){
data[i].key=data[i].key+10;
console.log(data[i].key)
}
for(vari=0;i 热门推荐
10 朋友新年祝福语大全 简短
11 新年祝福语简短大方兔年
12 搬新家礼物祝福语简短
13 同学见面花束祝福语简短
14 五一假期祝福语幽默简短
15 离职欢送敬酒祝福语简短
16 对学弟的祝福语简短
17 考老师辞职祝福语简短
18 祝福语驱散霉运的话简短