-
闭包现象
当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。
-
闭包的作用
-
实现公有变量
eg:函数累加器function add() i var count = 0;function demo( ) { count ++; console.log ( count) ; } return demo; } var counter = add ( ); counter( ) ; counter() ; counter( ) ; counter( ) ; counter( ); counter( ) ; counter( ) ;
-
可以做缓存(存储结构)
:外部不可见,但确实有的存储结构
eg,:eater -
可以实现封装,属性私有化。
eg: Person(); -
模块化开发,防止污染全局变量
-
```js
function test( ) {
var arr = [];
for(var i = 0; i < 10; i ++){
arr[i] = function () {
console.log(i);
}
}
return arr;
}
var myArr = test( );//输出10 10 10 10 ...
//改进
function test( ) {
var arr = [];
for(var i = 0; i < 10; i ++) {
( function (j) {//立即执行函数,每个单数生成自己单的的AO,里面保存j的值,而不是向上面的那样生成的都是test()的环境
//j = 0;
arr[j] = function ( ) {
document.write( j + " ");
}
}(i));
}
return arr;
}
var myArr = test( );
for(var j = 0; j < 10;j++){
myArr[j]( );
}
```
{
×+=typeof f;
}
console.log(x);//求结果
疑问
:if的条件判断里面函数定义为什么能执行?