zoukankan      html  css  js  c++  java
  • 从新来学一下 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   引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

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

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

     
     
     
     
     
  • 相关阅读:
    Ubuntu 20.04 国内下载eclipse 网速慢解决方案
    Ubuntu20.04+GeForce RTX 2080 SUPER+cuda11.1+cudnn8.0.4+openCV4.4.0编译
    计算机专业考研复试面试----计算机组成原理
    计算机专业考研复试面试----操作系统
    Gabor滤波(个人学习)
    局部保留投影算法(个人学习)
    【转载】matlab常用函数
    latex常见的错误(自己经常出现的)
    latex常用的宏包(转载)
    C语言基础知识
  • 原文地址:https://www.cnblogs.com/lipuqing180906/p/10000802.html
Copyright © 2011-2022 走看看