代码改变世界

javascript 基础二

2014-05-13 15:56  屁颠屁颠攻城湿  阅读(310)  评论(0编辑  收藏  举报

  接着来,上第二篇笔记,欢迎各位指出错误~

  同时附上evernote公开链接

  1、变量:js变量松散类型的本质,决定了变量只是在特定时间用于保存特定值的一个名字而已。

 
  2、变量可能包含的两种数据类型的值:基本类型值和引用类型值。
  1. 基本类型值保存在栈内存中简单的数据段,即这种值保存在内存中的一个位置。
    • 基本数据类型(5种)的值在内存中占用固定的大小,保存基本数据类型值得变量按值访问,实际操作的是保存的值。
  2. 引用类型值保存在堆内存中的对象,变量中保存的实际是一个指针,这个指针指向内存中的另一个位置,该位置保存着对象。
    • 引用类型的值大小不固定,不能保存在栈内存中,通过访问变量保存的指针来访问保存在堆内存中的对象,是按引用访问
  3、变量的动态属性
  1. 对于保存引用类型值的变量,可以为其添加属性和方法,也可以删除(delete obj[someAttr])属性和方法。
  4、复制变量值 
 
     注意区分基本类型值和引用类型值得复制,前者复制真实的值,后者复制的是指针,并有多个变量指向同一个对象。
 
  5、js函数传递参数
  1. 函数传参都是按照值传递
  2. 在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数,或者说是arguments对象的某一个元素)
  3. 在向参数传递引用类型的值是,会把这个值在内存中的地址复制给一个局部变量(命名参数,即传递的是指针),因此这个局部变量的变换会反映在函数外部。
  4. 可以把函数的参数想象为局部变量,参数在函数退出时立即销毁。
  6、检测类型instanceof)
  1. 基本数据类型用typeof检测,其中检测返回"Object"时,数据类型可能是null或者Object。
  2. 引用数据类型用instanceof检测,返回值为true或者false  eg:   var car={}; console.log(car instanceof Object)//返回true
  3. 使用instanceof检测基本数据类型的值时,永远返回false!
  4. 因为instanceof检测基本类型时返回false,故可以就此判断typeof中结果为Object的null和Object类型了。
  5. 函数是Object
  7、延长作用域链
     当执行流进入下列任何一个语句是,作用域链就会延长
  1. try-catch的catch语句中
  2. with语句   with语句中定义的变量,在with外也能访问
  8、没有块级作用域
  1. 没有块级作用域
    1. 块级作用域,{ }里面定义的变量,{ }外面访问不到
  2. 只有函数作用域
    1. 函数内定义的变量,函数外访问不到
  3. 利用闭包,可以模拟块级作用域
    1. eg:  function a(){ (function b(){ var c =1;})(); console.log(c); } a();  //报错,c为声明
    2. 多使用闭包,能避免命名冲突
 
  9、垃圾回收机制
  • 原理:找出不再使用的变量,释放其占用的内存。为此,垃圾收集器会按照固定的时间间隔(或代码执行中预定的收集时间),周期性的执行这一操作。
  1. 策略有二:标记清除、引用计数
    1. 标记清除:垃圾收集器在运行时给存储在内存中的所有变量都加上标记,然后去掉环境中的变量和被环境中的变量引用的变量的标记,最后去除带有标记的变量,销毁带标识的值和回收他们的所占的内存空间。
    2. 引用计数:跟踪记录每个值被引用的次数。
  10、管理内存
  1. 优化内存的最佳方式:为执行中的代码保存必要的数据,一旦数据不再有用,将其值设置为null来释放其引用--引用解除
  2. 引用解除不意味着自动回收该值所占的内存,真正目的是让值脱离执行环境,便于垃圾收集器下次运行时将其回收。