javascript足迹

一忙起来,什么技术文章都懒得写。但最大的谎言就是“i will remember it,i don't need to write it down”

好吧,还是记录点儿什么吧,虽然凌乱些,也是闪亮的小知识点。

1、IE8之前 闭包 慎重慎重再慎重!很多文章都讲闭包的原理,却从来没有深究 没有被内部函数使用的外部作用域变量是否被垃圾回收了呢。如下代码

!function (){
    var big1=123,
          big2="";
    
        ~function(){
             alert(big1);
        }();
}();

  big1由于闭包,不会被垃圾回收器回收这是毋庸置疑的。big2呢?了解闭包的原理都知道 所谓闭包 其实是因为内部函数的scope链引用了外部函数作用域上的活动对象使得内部函数可以直接引用外部函数的局部变量,而正是这些局部变量被引用因此他们不会被垃圾回收。从这种定义来看big2是不会被释放的(不光是big2,外部函数所有局部变量都不会回收)。是的,而且IE8- 和opera都很实在的按照这样做的。但这样合理吗 显然是不合理的。因此谷歌和火狐的垃圾回收机制都做了优化。经过实践证明 没被引用的闭包变量仍然会被释放。IE9也开始可以了。

不过不管怎样,使用闭包时一定要慎重。一些开销比较大的变量要及时set null提醒垃圾回收器回收。

 2、正则的表达式exec是上下文相关的。每次执行会根据上次结果继续搜索。不注意的时候就会遇到困惑。本来正则是对的,结果试验了一下(控制台下)返回结果null,这正是因为没有重置引起的。

       也就是说 exec上次搜索位置的index是保存到正则对象里的 跟exec()里的字符串无关。第二次执行exec()时,即使字符串变了也会在上次匹配串后面的位置开始搜索

  下面的例子可以说明一切

var r=/ab/g
console.log(r.exec('abc'));
console.log(r.exec('abd'));
var r2=/ab/g
console.log(r2.exec('abc'));
console.log(r2.exec('abcab'));

  注:貌似FF下无此问题

 

3、由trim引发的思虑不全的教训

4、jquery ajax必须处理error回调不然你会莫名其妙 ,如果没有特别要求get 请记得method:'post' 否则你很容易忘。post不会对中文编码。后台不需要配置转码。

 

posted @ 2013-01-25 15:00  Exolution  阅读(293)  评论(0编辑  收藏  举报