zoukankan      html  css  js  c++  java
  • 【js高程学习笔记】关于变量值和函数参数

    变量包含了两种不同类型的值:

    • 基本类型 (Undefined、null、Boolean、Number、string都属于基本类型)
    • 引用类型 (对象)

    两种值在赋值上不同的是:

    • 将一个引用类型的值(对象)赋值给一个变量,可以为其添加/删除属性和方法。
      但如果是一个基本类型的值是不可以这样的。
     var person = new Object();
     person.name = "Cat.y";
     console.log('person.name = ' + person.name);
    

    • 将一个基本类型的值赋给一个变量,那么是在这个变量上创建一个新值,改变新的变量里面的值,原本变量中的值不受影响
        var num1 = 5;
        var num2 = num1;
        console.log('num1 = ' + num1 + '
    ' + 'num2 = ' + num2);    //这里应该输出: num1 = 5   num2 = 5
        
        num2 = 10;
        console.log('改变num2的值后:
    ')
        console.log('num1 = ' + num1 + '
    ' + 'num2 = ' + num2);    //这里应该输出: num1 = 5  num2 = 10
        
        console.log('
    
    ');
    

    • 将一个对象赋值给一个变量,它赋的值实际上是这个内存空间的指向地址。

      可以理解为,创建了一个对象,就相当于开了一个房,你往这个对象里添加/删除方法、属性、值,就相当于在这个房间内放置/取出东西,
      而变量赋的值实际上就是这个房间的门牌号。

      因此,两个变量操作的都是同一个内存里的东西,所以,obj1改变了,obj2也会相应的变化
        var obj1 = new Object();
        var obj2 = obj1;
        obj2.name = 'Cat.y';
        console.log('obj1.name = ' + obj1.name + '
    ' + 'obj2.name = ' + obj2.name ); 
        // obj1.name = Cat.y   obj2.name = Cat.y
    

    函数中的参数相当于一个局部的变量

        function addTen(num){
            num += 10;
            return num;
        }
        var count = 10;
        var result = addTen(count);
        
        //输出结果应该为: count = 10  result = 20;
        console.log('count = ' + count + '
    ' + 'result = ' + result + '
    ');
    

    例子中将一个数值赋值给变量count,再新建一个变量result, result 的值是调用了函数addTen并将count做为参数传了进去而返回的值

    也就是说,result的值是经过addTen函数计算而返回的一个新的值;
    函数外,count并不会改变,因为它是相当于变量count的值赋值给了局部变量num,num改变的值是不会影响到count的

    再例:

        function setName(obj){
            obj.name = 'Cat.u';
        
            obj = new Object();      //在函数内重新给obj赋值了一个新的对象,指向的地址改变
            obj.name = 'Tuanzi.y';   //影响不到函数外的值
        }
        
        var person = new Object();
        console.log('person.name = ' + person.name + '
    ');   //这时候还没给peron.name赋值
        setName(person);
        console.log('person.name = ' + person.name + '
    ');   //person.name = Cat.u
    

    如果调用一个函数时,将一个对象作为参数传了进去,这里要注意的是,它传递的是“指向这个内存的地址”,是地址而不是值,也就是“门牌号”

    如果在函数内重新给obj变量赋值一个新的对象,obj指向的内存地址改变,那之后更改对象内的属性,对函数外是没影响的

  • 相关阅读:
    maven打包
    (和)后台解析
    beetl简单阅览
    snmp在win10上安装使用
    javaMail发送邮件
    mysql 安装配置详解
    vsftpd的主配置文件详解
    linux下vi命令笔记
    linux下sed命令笔记
    linux下grep命令笔记
  • 原文地址:https://www.cnblogs.com/mlcat/p/10242306.html
Copyright © 2011-2022 走看看