学习 javascript高级程序设计 (第3版)-- 变量、作用域、内存问题

来源:互联网 发布:c语言中合法的字符常量 编辑:程序博客网 时间:2024/05/22 06:36

一、变量

变量包含两种数据类型:基本类型、引用类型

1、动态属性

       例如:var a=new object()

             a.name=”xx”

             alert(a.name);  //返回 xx

 

       例如:var name = abc”

             name.age=27;

             alert(name.age);  //返回 underfind

      

       基本类型不可以定义动态属性

 

2、复制变量

   基本类型复制变量后,会在变量上创建一个新值,两者操作互不影响;

   引用类型复制变量后,只是复制了一个指针,两者指定的是同一个对象;

3、检测类型

       typeof()检测基本的数据类型

       instanceof()  检测引用类型(对象类型)

       例如:

             alert(a instanceof Object) //检测a是否是对象

             alert(a instanceof Array) //检测a是否是数组

             alert(a instanceof RegExp) //检测a是否是正则表达式

 

4、作用域

   例如:function add(num1,num2){

         var s=num1+num2;

         return s;

         }

         var result = add(10,20);  //返回 30

         alert(s);  //报错   原因:var定义后 s为局部变量,在外围访问不到

 

  例如:function add(num1,num2){

         s=num1+num2;

         return s;

         }

         var result = add(10,20);  //返回 30

         alert(s);  //返回30   原因:未定义var 为全局

 

5、垃圾收集

   Js有一个自动管理垃圾的功能(管理机制:局部变量只在函数执行时存在;)  

   1、标记清除    

      当变量进入环境时,会被标记“进入环境”,当离开时标记“离开环境”

   2、引用计数

      跟踪记录每个值引用的次数来判断

 

6、管理内存

       管理内存最好的方法是 使用null解除引用

 

小结

      :javascript可以保存两种数据类型:基本类型和引用类型:

      :基本类型在复制后是创建了一个副本,操作副本与之前值无关

      :引用类型在复制后是创建了一个指向对象的指针,所以他们指向的是同一个对象,更改时都会发生改变;

      :确定值是哪一种基本类型可以运用typeof操作符,而确定是哪一种引用类型则需要运用 instanceof操作符;

     

      所有的变量都存在与一个执行环境(作用域)中:

      :执行环境可以分为:全局执行环境和函数执行环境

      :当进入一个新环境时,都会创建一个用于搜索的变量和一个作用域链

      : 函数执行环境不仅可以访问函数执行环境中的变量,可以访问其父级以及全局

      : 全局环境变量正能访问全局,不可以访问局部

      :变量的执行环境有助于确定应该何时释放内存

 

      Js是一门具有自动垃圾收集机制的语言:

      :离开作用域的值将被标记为可回收,以便于垃圾收集时释放

      :“标记清除”是最常用的一种清除方法,将不用的值进行标记,以便清除

      :“引用计数”,这种方法的思想是跟踪所有值引用的次数,js引擎目前不再使用这个方法,但Ie中在引用原生js时,仍然会出现问题

      :当代码中存在循环现象时,”引用计数“收集会出现问题

 

 

             

   

 

   

        

0 0
原创粉丝点击