一.js闭包
闭包定义:当内部函数被保存到外面的时候,就会形成闭包
缺点:闭包会导致原有的作用域链不释放,造成内存的泄漏
(在函数执行前的一瞬间会生成自己的AO,这就是函数执行了2次,生成了两次AO,这两次AO是没有任何关联的
)
优点:(1).实现共有变量
(2).做缓存
(3).实现封装让属性私有化
(4).模块化开发,防止污染全局变量
闭包实例:
html:
<ul>
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
js:
<script>
var lis = document.getElementsByTagName("li");
for(var i = 0;i < lis.length;i++){
// console.log(lis[i]);
// lis[i].onclick = function(){
// console.log(i);//bibao
// }
(function(i){
lis[i].onclick = function(){
console.log(i);
}
})(i)//匿名函数
}
/*GO = {
lis : object
i : 10
}
ni.ao = {
i : 0
}
click.ao = {
}*/
</script>
二.js递归
递归例题:计算某个数的阶层
普通方法:
function mul(n){
// var num = 1;
// for(var i = 1;i <= n;i++){
// num *= i;
// }
// return num;
递归方法:
1.找规律
5!=5*4!;
n!=n*n-1!;
2.找出口
function mul (n){
if(n <= 1){
return 1;
}
return n * mul(n - 1);
}
console.log(mul)
递归就是函数内部自己调用自己
递归的效率其实是最低最低的;
唯一的优点:人可以看的懂
来源:oschina
链接:https://my.oschina.net/u/4284426/blog/3503189