基本点
淘宝的样式初始化:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }
检测引用类型的值的数据类型的方法
instanceof
var person = {}
person instanceof Object // true
执行环境:
每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个变量对象中。
web浏览器中, 全局执行环境被认为是window对象,所有全局变量和函数都是作为window的属性和方法创建的,某个执行环境中的代码被执行完毕之后,该环境被销毁,保存在其中的变量的函数也随之被销毁。
每个函数都有自己的执行环境, 当执行流进入一个函数的时候,函数的环境就会被推进一个环境栈中,函数执行之后,栈将环境弹出,把控制权返回给之前的执行环境。
作用域链: 保证对执行环境有权访问的所有变量和函数的有序访问。
内部环境可以通过作用域链访问所有外部环境,外部环境不能访问内部环境的任何变量和函数。
延长作用域链: try-catch with
声明变量: 使用var声明的变量会自动添加到最接近的环境中。如果初始化变量的时没有使用var声明,该变量会自动被添加到全局变量中。
垃圾收集:js具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。
方式一:标记清除,最常用的垃圾收集方式,当变量进入环境时,将变量标记为进入环境,当变量离开环境时将其标记为离开环境。
垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记,然后去掉环境中以及被环境中变量引用的变量的标记,在此之后再被加上标记的变量则被 视为将被删除的变量。原因是环境中的变量已经无法访问到这些变量了,最后垃圾收集器完成清除工作,删除带标记的值并回收它们的内存空间。
方式二:引用计数,跟踪记录每个值被引用的次数,当声明了一个变量并将一个引用类型的值赋给该变量时,则这个值的引用次数是1,如果将同一个值又赋给另外一个 变量,则引用次数为2。相反,如果包含对这个值引用的变量取得了另外一个值,则引用次数减1,。当引用次数值为0时,则说明没有办法再访问这个值了,因 此可以将其占用的内存空间回收回来。当垃圾收集器下次运行的时候,就会释放引用次数为0的值的所占用的内存。
管理内存: 确保占用最少的内存可以让页面获得更好的性能。而优化内存占用的最佳方式,执行中的代码只保存必要的数据。一旦数据不再有用,最好通过将其设置为null来释放其引用——这个做法叫解除引用(适用于全局变量和全局对象的属性)