一.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)
递归就是函数内部自己调用自己
递归的效率其实是最低最低的;
唯一的优点:人可以看的懂