开始看编写高质量的代码
经过两个星期的“无所事事”,两个星期的“欲睡昏昏”,把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. 继承就这么实现了。
疯癫不成狂,有酒勿可尝;世间良辰美,终成水墨白。