各种方案实现页面的自动刷新功能

上次提到了我现在又开始重新看《javascript权威指南》和《javascript高级程序设计》了,这不,今天在激光原理的课上把高级程序中的函数和BOM部分又翻了一遍,对闭包和私有变量有了更深入的理解。然后就是开始在笔记本上记录些东西了,因为发现很多东西虽然知道个大概,但自己讲不出来,如果面试的时候,面试官问我:什么是闭包?闭包有哪些用途?以前我肯定说不上来,或者不能很确定地说出来,因为大脑中没有清晰的条理,或者说看书的时候没有刻意的去加强印象。但现在我会很肯定的说:闭包是定义在函数内部的函数,特性是闭包有权访问外部函数的所有变量;利用闭包的特性可以模仿块级作用域,还可以创建私有变量。javascript函数中还有下面几点要注意:
  • arguments.callee是一个指向正在执行的函数的指针,在编写递归函数时推荐使用。
  • 在IE9之前的版本中要注意内存泄露的问题,如果闭包的作用域链中保存着一个HTML元素,那么就意味着该元素将无法被销毁。如下例所示: [php] function assignHandle(){ var element=document.getElementById('someelement'); element.onclick=function(){ alert('element.id'); } [/php] 以上代码创建了一个作为element元素的事件处理程序的闭包,而这个闭包又创建了一个循环引用。由于匿名函数保存了一个对assignHandle的活动对象的引用,因此就会导致无法减少引用,只要匿名函数存在,element的引用数至少为1,因此它所占的内存就永远不会回收,解决方案如下: [php] function assignHandle(){ var element=document.getElementById('someelement'), id=element.id; element.onclick=function(){ alert(id); } element=null; } [/php]
  • 再记点BOM的笔记,主要是一些特别注意,加强一下印象,形成有意的记忆:
    • 全局对象会成为window对象,他们之间的差别是window对象不能通过delete操作符删除,在IE<9中会抛出错误,其他浏览器中返回false,而定义在window对象上的属性则可以删除。如下例所示: [php] var age=29; window.color="red"; delete window.age; delete window.color; alert(window.age);//29 alert(window.color);//undefined [/php]
    • 删除未申明的变量会抛出错误,但是通过查询window对象可以知道某个可能未声明的边欧亮是否存在。这一点的用处很广,比如: [php] if(window.value){ //... } [/php] 上面是非常常见的条件判断。
    • 言归正传,回到标题上。页面自动刷新也是非常常见的功能,比如老罗视频发布会时的各种直播贴,以及篮球爱好者经常用手机看的定时刷新的赛况网页,都用到了这个技术。其实这也是在BOM中发现的问题,location对象的url重载和替代等。以下是各种实现方法:
      1. [php]<meta http-equiz="refresh" content="10;url=">[/php] 这种方法是在网上看到的,不需要js在头部添加个meta就可以实现每隔10秒刷新页面
      2. window.location.reload(true);windwo.navigate('url');window.loaction.href='url';location.assign('url');location.replace('url');history.go(0);document.execCommand('url'); js实现,参数true表示重新加载,默认是从缓存中加载。定时的话则调用setTiemout()就行。
      3. 原本打算把各个js方法分开写的,那样就可以列很多了,就符合标题的“各种”两字了,但写的顺手就直接归到js方法了,导致各种只有两种。。另外,location对象的用处很广,是BOM中最有用的对象之一,除了上面提到的刷新页面外,还可以进行网页的重定向等。
posted @ 2013-04-23 22:31  echoHUST  阅读(659)  评论(0编辑  收藏  举报