变量和作用域

1.基本类型和引用类型

  • 5种基本类型Null,Undefined,Boolean,Number,String都是按值访问的,可以在栈中保存实际的值。
  • Object是引用类型的值,在栈中保存的是引用类型的地址,而实际值存储在堆中。引用类型是按照引用访问的。

2.复制变量

如果是基本类型,复制时,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。

var num1=5; var num2=num1;

 ---------------------------------
 |    num1     |      5     |
 ---------------------------------
 复制后
 ---------------------------------
 |    num1     |      5     |
 ---------------------------------
 |    num2     |      5     |
 ----------------------------------

如果是引用类型复制,那么复制的引用地址(指针),两个变量实际上引用的是同一个对象。

3.传递参数

所以函数的参数都是按照值传递的。也就是说,把函数外部的值复制给函数内部的参数。

例子:

  function addTen(num){
    num += 10;
    return num;
  }

  var count = 20;
  var result = addTen(count);
  alert(count);    //20
  alert(result);   //30

  -------------------------
 function setName(obj){
   obj.name = 'Nicole';
 } 
 var person = new Object(); // or 'var person = new String();'
 setName(person);
 alert(person.name);   // Nicole
  -------------------------
 function setName(obj) {
   obj.name = 'Nicole';
   obj = new Object();
   obj.name = 'Bill';
 }
 var person = new Object();
 setName(person);
 alert(person.name); // Nicole

results matching ""

    No results matching ""