JavaScript内存优化

寒假系统学习javascript的时候,写了一些简单的练习代码,先来看下面一段:

//闭包
var global_ten=10;
var sum;

function papa() {
var hundred_more=100;
sum=function(a,b){
return a+b+global_ten+hundred_more;
};
hundred_more=10000;
}

papa();//changed the hundred_more
console.log(sum(9,11));//hundred_more has changed

//访问保留环境中存在的i
var fns=[];
function definer(){
for(var i=0;i<5;i++){
fns.push(function(){
return i;
});
}
}
definer();
for (var i = 0; i < fns.length; i++) {
console.log(fns[i]());
};
//引入另一个作用域对象local_i
//() 立即函数 立即执行
var fns_ano=[]
function definer_ano(){
for(var i=0;i<5;i++){
fns_ano.push(function(local_i){
return function(){
return local_i;
}
}(i));
}
}
definer_ano();
for (var i = 0; i < fns_ano.length; i++) {
console.log(fns_ano[i]());
};

闭包是JavaScript 的高级特性,我们可以借助它来实现更多更复杂的效果来满足不同的需求。但是要注意的是因为把带有​​内部变量引用的函数带出了函数外部,所以该作用域内的变量在函数执行完毕后的并不一定会被销毁,直到内部变量的引用被全部解除。所以闭包的应用很容易造成内存无法释放的情况。

还有以下几个概念:

作用域

域(scope)是JavaScript 编程中一个非常重要的运行机制,在同步JavaScript 编程中它并不能充分引起初学者的注意,但在异步编程中,良好的作用域控制技能成为了JavaScript 开发者的必备技能。另外,作用域在JavaScript 内存管理中起着至关重要的作用。

作用域链

由于JavaScript 中,变量标识符的查找是从当前作用域开始向外查找,直到全局作用域为止。所以JavaScript 代码中对变量的访问只能向外进行,而不能逆而行之。

以上应有图,但是搜了一下网上资源也很多,在此不赘述 推荐:JavaScript内存优化

ps:关于系统学习javascript语言之建议--《javascript for php developers》。注: 以上内容《深入浅出node.js》也有详解。

标签: none

仅有一条评论

  1. 希望你的博客如这个夏天一样火热。

  2. 闲来无事,到此一游

    乙未年(羊)九月初八 2015-10-20

添加新评论