开始看编写高质量的代码

  经过两个星期的“无所事事”,两个星期的“欲睡昏昏”,把javascript高级程序设计看第二遍看到DOM了。。。觉得周末真是好~~~ 只是可以享受一下睡眠饱饱的早晨,或者悠哉的下午~

  这一次看的过程,作者要阐述的观点清晰了些。但是我也会去求证。

  看阿当的书,觉得有个地方不对:代码如下

 1 <script type="text/javascript">
 2     var str, arr = [];
 3 
 4 </script>
 5 <p>first</p>
 6 <script type="text/javascript">
 7     (function(){
 8         var a = 1, str = b = "Hello world";
 9         arr.push(1);
10     })()
11     
12 </script>
13 <p>second</p>
14 <script type="text/javascript">
15     (function(){
16         console.log("str", str);
17         arr.push(2);
18         console.log("arr:", arr);
19         var b = str;
20         var d = b + "," + "xian is very handsome!";
21         console.log(d);
22     })()
23     
24 </script>

  为了避免全局变量的冲突,我们使用闭包,因为一个function 会有各自的作用域,从而保护里面的变量。但是很多时候我们的js代码有互动性,但是不是一个模块的,又不想放在一起。按照书上所说的,创造一个全局变量,但是那种方法只对引用类型才起作用。因为是基本类型的时候,还是相当于未定义,不能实时改变全局的值。

  另外,在看js高级程序设计的过程中,说道:匿名函数指向window,为什么呢? 因为只有当函数作为方法被对象调用的时候,指向那个对象;而当不知道指向何处的时候,才指向window/global. 

  我们知道js的垃圾回收有两种方法,标记跟引用计数。有好多情况会引起“内存泄露”,例如闭包。那为什么呢?因为闭包执行结束的时候,他引用的变量依然存在!那为什么依然存在呢?不是整个函数执行完毕,都会销毁变量嘛?原来每个function都有自己的一个作用域链,当最外面的作用域销毁了,里面的还有个呢。。。这种概念就跟每个function都有自己的原型prototype一样吧~ 说到prototype ,每个构造函数都有一个原型prototype,而这个构造函数的实例都指向prototype,所以当我们将一个构造函数的prototype = 另一个构造函数A的实例B,因为B同时复制了构造函数的基本属性,并且指向了A的prototype. 继承就这么实现了。

posted @ 2013-10-19 21:36  楚玉  阅读(178)  评论(0编辑  收藏  举报