发表于: 2017-04-26 21:59:31

1 1012


今天完成的事情:


天天听闭包的概念,终于找到了一个实例解说闭包的,而且很浅显易懂啊:

闭包简单的说就是一个函数能访问外部函数的变量,这就是闭包,比如说:


function a(x){       

var tem=3;      

function b(y){          

console.log(x+y+(++tem));     } }


a函数中的b函数就是闭包了,b函数可以使用a函数的局部变量,参数,最典型的闭包应该是下面这样,将定义在函数中的函数作为返回值


function a(x){       

var tem=3;      

function b(y){          

console.log(x+y+(++tem));     } 

return b; }


闭包的另一种作用是隔离作用域,比如:


for(var i=0;i<2;i++){      

setTimeout(function(){              

console.log(i);        },0); }


上面这段代码的执行结果是2,2而不是0,1,因为等for循环出来后,执行setTimeout中的函数时,i的值已经变成了2,这就是没有隔离作用域所造成的,比如:


for(var i=0;i<2;i++){      

(function(i){             

setTimeout(function(){              

console.log(i);        },0)    })(i); }


这样就会输出0,1,我们的立即执行函数创建了一个作用域,隔离了外界的作用域。

闭包的缺点是,因为内部闭包函数可以访问外部函数的变量,所以外部函数的变量不能被释放,如果闭包嵌套过多,会导致内存占用大,要合理使用闭包。


那么为啥使用闭包呢,这就涉及到了内存泄漏:

内存泄漏指的是浏览器不能正常的回收内存的现象


看知乎上老大说for循环多的是垃圾代码,加法操作多的是垃圾代码,嵌套一塌糊涂的是垃圾代码之类,遂去了解一下:

关于加法:

加号在js中非常耗时和耗内存,需要经过六步:

1.开辟一块临时空间,存储字符串

2.然后再开辟一块空间

3.把str中的字符串复制到刚刚开辟的空间

4.把需要连接的字符串复制到str后面

5.str指向这块空间

6.回收str原来的空间和临时空间

可以通过数组的push方法来替代加法操作,数组是连续的存储空间,可以省下很多步



学到事件委托机制(大大的省代码哟)

比如要监听下面的<li>

<ul>

<li>

<li>

<li>

<li>

</ul>

使用事件委托就只需要在<ul>上设置监听器函数,就可以监听所有<li>的事件了,可以大大提高性能,减少绑定事件的元素,减少内存占用,提高效率。


明天要做的事:

测试任务四代码,修改bug,优化代码


遇到的问题:

已经声明UTF-8编码了,js中的弹出字出现乱码,但是html中字正常显示。

以前都是在开头声明一下编码方式,但是js中无法声明,最后发现要在IDE中规定,给跪了:


收获:

对console的操作更熟练了,弹弹弹各种东西看效果。

代码熟练度UP,准备优化一下代码,而且以前优化代码是优化CSS代码,只需要考虑减少代码行数,书写规范,增加可读性就好了;但是JS的代码优化可能越优化代码行数越多,但是占用的内存下降了,提高浏览器的解析效率就是成功的优化。





返回列表 返回列表
评论

    分享到