javascript高级语言程序设计四

来源:互联网 发布:安卓免费源码分享网站 编辑:程序博客网 时间:2024/05/17 02:04

变量包含两种数据类型的值

基本类型:指的是简单的数据类型。

引用类型:指的是哪些可能由多个值构成的数据对象。

 

复制变量值:

var num1=5

var num2=num1;

num1

5

 

复制对象后

num2

5

num1

5

num1中保存的变量值是5,当使用num1的值初始化num2时,num2中也保存了值5,但num1中的5,与num2中的5,是完全独立的,该值只是num1中5的一个副本。

var obj1=newObject();

var obj2=obj1;

obj1.name="yht";

alert(obj2.name);//yht

代码内容如下所示

 

function addC(num)

{

   return 10+num

 };

var count=20;

varresult=addC(count);

alert(count);//20

alert(result);//result

 

function setName(obj)

{

   obj.name="Nicholas"

};

var person=newObject();

setName(person);

alert(person.name);//"Nicholas"

 

如上说示,可能有的人会想是不是引用类型传的是地址,其实部是,只是引用的指针并没有改变罢了。

function setName(obj)

{

    obj.name="Nicholas";

    obj =new Object();

    obj.name="Greg"

}

var person =newObject();

setName(person);

alert(person.name);//Nicholas

如上所示充分证明了,引用类型不是按址传递的而也是按值传递的。在函数内部修改了参数的值,但原始的引用任然保持未变。

 

检测类型的函数:

typeof:                检测普通变量类型的最佳工具。

instanceof:        检测引用类型,对象的最佳工具。

 

执行环境及作用域:

当代码在一个环境中执行,会创建变量对象的一个作用域链,作用域链的用途,是保证对执行环境由权访问的所有变量和函数的有序访问。

var color="blue";

functionchangeColor()

{

    var anycolor ="red";

 function swapColors()

 {

    var tempcolor =anycolor;

    anycolor=color;

    color=tempcolor

 };

 swapColors();

}

changeColor();

 

如上代码段分为三个环境,全局环境-changeColor()-swapColor()这三个环境中父级环境都不可以访问自己环境中的变量,而子级环境中的变量是可以访问父级环境中的变量的。

作用域延生:

使用var声明的变量会自动被添加到最接近的环境中,在函数内部,最接近的环境就是函数的局部环境。如果初始化变量时,没有使用var声明,该变量会自动添加到全局环境。在局部作用域中,变量的搜索是从内往外一层一层的搜索的,如上图所示先搜索swapColors--->changeColors()-->windows;依次搜索这些环境。

 

javascript的垃圾回收机制:

         最常用的是标记清楚(mark-and-sweep)定义了一个“进入环境“的变量列表与一个”离开环境“的变量列表,当变量进入环境时,就被标记为”进入环境“。离开时被标记为”离开环境“最后垃圾回收器再完成清理。

管理内存: 

         确保占用最少的内存可以让页面性能更好,而优化内存占用的最佳方式,就是为执行中的代码只保留必要的数据。一旦数据不再由用,最好通过将其值设置为null来释放其引用。这个做法叫做解除引用。

 

functioncreatePerson()

{

   var localPerson=new Object();

   localPerson.name=name;

     return localPerson;

var globalPerson=createPerson("Nicholas");

//手动释放内存

globalPerson=null;

 

 

总结:

  1. 基本类型占用固定的内存空间,保存在栈中
  2. 从一个变量值到另一个变量值赋值,会创建这个值的一个副本
  3. 引用类型的值是对象,保存在堆中。
  4. 包含引用类型值的变量实际上包含的并不是对象本身而是一个指向该对象的指针。从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个对象。
  5. 确定一个值是哪中基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。

 

0 0
原创粉丝点击