之前在学编译原理的时候接触过闭包这个概念,就是一组数据中所有数据的任意组合为闭包,然而突然看到与匿名函数放在一起了,感觉应该不是那个意思,所以就了解了一下。
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数。
匿名函数
- 一般函数的创建:
function a(){
return 1;
}
- 匿名函数的创建:
匿名函数有两中创建方式,第一种就是将它赋值给一个变量:
var b = function(){
return 1;
}
第二种可以用自执行的方法:
(function(){
return 1;
})()
匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。
闭包
创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。
function a(){
var name='hello world';
return function (){ //通过匿名函数返回a()局部变量
return name;
}
}
- 使用闭包的好处:
1 . 使用闭包可以把局部变量驻留在内存中,可以避免使用全局变量。
2 . 加强封装性,可以达到对变量的保护作用。 - 使用闭包的缺点:
1 . 由于闭包内部变量优先级高于外部变量,所以多查找作用域链中的一个层次,就会在一定程度上影响查找速度。
2 . 由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存。
过度使用闭包会导致性能下降,所以还是慎用吧。