javascript之闭包与匿名函数
2016-12-04 10:25
459 查看
闭包:有权访问另一个函数作用域中的变量的函数。
常见为在一个函数内部创建另一个函数的形式。
匿名函数访问了外部函数中的变量propertyName。之所以能访问是因为内部函数的作用域中包含了createComparison()函数的作用域。
闭包,匿名函数,变量之间的关系
闭包与变量:
全局变量容易污染代码,产生不必要的错误,所以推荐使用局部变量(亦称变量的私有化)。
那么何为变量的私有化:
外部无法访问私有化的局部变量。
最重要的是
局部变量在每次调用时都会初始化。
匿名函数:
匿名函数就是没有名字。。。。
如何让匿名函数执行呢?
1.新学会一种自执行
就是把自己当成一个函数啦。。
试一下让普通函数中嵌套匿名函数来达到闭包的效果。
总结而言:
闭包有三个特性:
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
闭包的特点:
1.闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。
2.闭包的优点:
希望一个变量长期驻扎在内存中
避免全局变量的污染
私有成员的存在
3.主要应用闭包场合主要是为了:设计私有的方法和变量。
4.一般函数执行完毕后,局部活动对象就被销毁,内存中仅仅保存全局作用域。但闭包的情况不同!
再说一下垃圾回收原理吧:
(1)、在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
(2)、如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。
常见为在一个函数内部创建另一个函数的形式。
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者所引用,那么这两个互相引用的对象也会被回收。
相关文章推荐
- JavaScript 匿名函数、模块模式、闭包、命名空间、创建构造器(类)、继承
- 详谈JavaScript 匿名函数及闭包
- (转载)JavaScript中匿名函数,函数直接量和闭包
- JavaScript基础---作用域,匿名函数和闭包
- JavaScript关于闭包,匿名函数,this,对象等的一些理解
- 深入理解javascript 匿名函数和闭包
- (转载)JavaScript中匿名函数,函数直接量和闭包
- javascript:复习匿名函数和闭包
- JavaScript之基础-13 JavaScript Functions (Function对象、创建函数、匿名函数、闭包)
- 【JavaScript】匿名函数和闭包
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
- JavaScript 匿名函数和闭包
- 转载--详谈JavaScript 匿名函数及闭包
- JavaScript 匿名函数和闭包介绍
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
- JavaScript中匿名函数,函数直接量和闭包(转)
- JavaScript 匿名函数(anonymous function)与闭包(closure)
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
- 详谈JavaScript 匿名函数及闭包
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】