码迷,mamicode.com
首页 > 编程语言 > 详细

javascript-变量的作用域

时间:2014-11-15 15:25:43      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:io   ar   sp   java   数据   on   cti   代码   bs   

变量的赋值 如果从一个变量上向另一个变量上复制__基本数据类型__的值,会在变量对象上创建一个新值,然后把该值复制到新变量的位置上,这个很好理解,来看下例子:

var num1 = 5; var num2 = num1;

这是基本数据类型,而引用类型呢?其实同样会将原来变量上的值复制一份到新的变量当中,只不过,复制的其实是原来变量的一个指针,而这个指针指向存储在堆中的一个对象。复制完成后,两个变量都指向了堆中的同一个对象,所以改变其中一个的值,会对另外一个产生影响。有以下代码 

 var obj1 = new Object();

 var obj2 = obj1;  

obj1.name = "Nicholas";  

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

传递参数 在javascript里面,参数的传递都是按照`值类型来传递`的,即使你传入的是一个引用类型

function setName(obj) {       

  obj.name = "Nicholas";

var person = new Object();

setName(person);

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

上面代码的返回结果貌似参数是引用类型的传递,因为开始person对象没有属性,调用了setName方法之后,给参数obj加上了name参数,然后外面的person打印person.name竟然是有值的,这是很明显的引用传递的效果。但是不要被这种现象所迷惑,javascript在传递引用类型的参数的时候,只要这个参数不发生改变,那么还是按照引用类型来处理,但是只有发生了改变效果就完全不一样了 

function setName(obj) {      

    obj.name = "Nicholas";    

    obj = new Object();       

    obj.name = "Greg";

}

     var person = new Object();

  setName(person);

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

 

javascript-变量的作用域

标签:io   ar   sp   java   数据   on   cti   代码   bs   

原文地址:http://www.cnblogs.com/yan940623/p/4099296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!