对保存变量及传递变量的思考

时间:2021-05-14 19:54:36
//基本类型和引用类型的值
//ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.
//基本类型值是指简单的数据段,而引用类型值指那些可能由多个值构成的对象.
//1.基本类型变量的传递
var name = "陈国栋"
name.age = 25;
console.log(name.age); //undefind 此处不会报错,返回值为undefind
//2.引用类型变量的传递
var person = new Object();
person.name = "陈国栋";
console.log(person.name); //陈国栋 引用类型我们可以为其添加属性和方法,基本类型则不行
//3.基本类型变量的传递
var num1 = 5;
var num2 = num1;
console.log(num1); // 5
console.log(num2); // 5
num1 = 10;
console.log(num1); // 10
console.log(num2); // 5
num2 = 15;
console.log(num1); // 10
console.log(num2); // 15 以上可以看出,基本类型变量在专递过后是相互独立的,不管其中一个变量如何修改,另外一个变量都不会发生改变.
//4.引用类型变量的传递
/*当从一个变量向另外一个变量赋值应用类型的值时,也会将储存在变量对象中的值赋值一份放到位新变量分配的空间中.不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象.复制操作结束后,两个变量实际上将引用同一个对象.因此,改变其中一个变量,就会影响另外一个变量*/
var person2 = person;
console.log(person.name); //陈国栋
person2.name = "张飞";
console.log(person.name);  //张飞
console.log(person2.name);  //张飞

根据上面理论在实际运用中的思考

 function getPageInfo(){
     var page={};
     page.pageWidth = window.innerWidth;
     page.pageHeight = window.innerHeight;
     if(typeof page.pageWidth != "number"){
        if(document.compatMode == "CSS1Compat"){
          //验证当前页面是否在标准模式下
          page.pageWidth = document.documentElement.clientWidth;
          page.pageHeight = document.documentElement.clientHeight;
        }else{
          page.pageWidth = document.body.clientWidth;
          page.pageWidth = document.body.clientHeight;
        }
     } 
     return page;
   }
mypage = getPageInfo();
   console.log(mypage.pageWidth+","+mypage.pageHeight);//1289.1189
   window.innerWidth = 100;
   console.log(mypage.pageWidth) //1289
   console.log(window.innerWidth) //100

上面为获取窗口可视尺寸的函数.

其中将window.innerHeight的值赋值给page.pageHeight,即相当于我们例子中num2赋值给num1一样,是基本类型变量的传递.

所以我们在修改window.innerWidth的值时,mypage.pageWidth的值不会发生改变.