一.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)

递归就是函数内部自己调用自己

递归的效率其实是最低最低的;

唯一的优点:人可以看的懂