从新来学一下 JS -- 第一章

先从经典的  new个新对象来吧;

function setName(obj) {
obj.name = "对象";
//return obj.name = "新对象"
 obj = new Object();
 obj.name = "新对象";
}
var person = new Object();
setName(person);
console.log(person);
 
 
先来解析一下  函数的运行;
  
function setName(obj){}    我是命名了一个为  setName  的函数;它有一个  形参-变量(obj);没有确定值  类型;
 
然后   obj.name = "对象"   这一赋值操作  ,将  我们声明的  参数 obj 下的  叫做  name 的对象  赋值  “对象”;(语法上来说 这么做是  不允许的 直接运行  会报错 ;那么如何解决 ?    向下看)
 
我们 打印出来  会发现  这个  obj  里面 会有一个 叫做  name  的对象   ;他的值就是  string -- “对象”, 
 
 
然后 我又 重新定义  obj  ,(obj  = new Object() ),然后重新赋值  其下的  name  = “新对象”;
 
按照  执行顺序 来说  现在  obj.name  = “新对象”;
 
声明  person  为一个 新对象(   var person = new Object();     在这里  我们  规定了  person   为一个对象  ) 
 
然后  调用了 函数  setName()
 
参数为  我声明的 (person)
 
然后打印 console.log(person)     
 
理论上  应该是  {name: "新对象"}
 
但是  事实上  打印结果  为 {name: "对象"}!!!!!
 
 
为什么?  我明明  重新 new Object()  赋值  name = “新对象” 了呀!
 

其实  在函数setName()内部修改了参数的值,但原始的引用仍然保持未变。实际上,当在函数setName()内部重写obj 时,这
个变量  obj   引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

所以  我们看到的  最终值  是  “对象” 不是  “新对象”;

哈哈哈哈   是不是 很好玩儿  ;有意思 呀;

 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/lipuqing180906/p/10000802.html