您的位置:首页 > Web前端 > JavaScript

javascript之闭包与匿名函数

2016-12-04 10:25 459 查看
闭包:有权访问另一个函数作用域中的变量的函数。

常见为在一个函数内部创建另一个函数的形式。

function createComparison(propertyName){

return function(obj1,obj2){
var value1=obj1[propertyName];
var value2=obj2[propertyName];

if(value1<value2){
return -1;
}
else if(value1>value2){
return 1;
}
else{
return 0;
}
};
}


匿名函数访问了外部函数中的变量propertyName。之所以能访问是因为内部函数的作用域中包含了createComparison()函数的作用域。

闭包,匿名函数,变量之间的关系

闭包与变量:

全局变量容易污染代码,产生不必要的错误,所以推荐使用局部变量(亦称变量的私有化)。

那么何为变量的私有化:

function box(){
var a=100;
}
alert(a);//a is not defined


外部无法访问私有化的局部变量。

最重要的是

局部变量在每次调用时都会初始化。

匿名函数:

function(){
var a=100;
alert(a);
}


匿名函数就是没有名字。。。。

如何让匿名函数执行呢?

1.新学会一种自执行

(function(a){
alert(a);
})(100);//alert返回100


就是把自己当成一个函数啦。。

试一下让普通函数中嵌套匿名函数来达到闭包的效果。

function a(){
var b=100;
return function(){
b++;
alert(b);
};
}
var c=a();
alert(c());


总结而言:

闭包有三个特性:

1.函数嵌套函数

2.函数内部可以引用外部的参数和变量

3.参数和变量不会被垃圾回收机制回收

闭包的特点:

1.闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

2.闭包的优点

希望一个变量长期驻扎在内存中

避免全局变量的污染

私有成员的存在

3.主要应用闭包场合主要是为了:设计私有的方法和变量。

4.一般函数执行完毕后,局部活动对象就被销毁,内存中仅仅保存全局作用域。但闭包的情况不同!

再说一下垃圾回收原理吧:

(1)、在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收;

(2)、如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: