其实这两个我也看了好多遍了但总是记不住!好气哦但还是要保持学习的心态,所以今天手写理一遍,希望不会忘得一干二净。
闭包
有权访问另一个函数作用域中的变量的函数。
创建闭包的常见方式,就是在一个函数内部创建另一个函数。
会携带包含它的函数的作用域,会比其他函数占用更多内存。
会有内存泄漏的问题。如果闭包作用域链中包含html元素,那就意味着无法被销毁。
闭包只能取得包含函数中任何变量的最后一个值。
匿名函数
没有名字的函数: function () {};
使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数。
立即执行函数(function(){…})() 内部定义的变量不会和外部的变量发生冲突
遇到一个题,可以借助这道题加深一下对闭包的认识:
写一个count函数,实现如下效果:
count()===1,
count()===2,
...
依次递增。
不可以有和count同级的其他变量。
由题目条件可以看出,count函数必须是个立即执行函数,立即执行函数有两种:( function(){…} )()和( function (){…} () ),另外还要用到闭包,这样才能实现递增的效果。
下面是一个答案:
var count = (function() { //立即执行函数
var i = 1;
return function() { //闭包
return i++;
};
})()
欢迎大家讨论指正~~~
网友评论