JavaScript高级面试题
1、 值类型与引用类型的差别
-
基本类型在内存中占据固定大小的空间,因此被保存在栈内存中;
-
从一个变量向另一个变量复制基本类型的值,复制的是值的副本;
-
引用类型的值是对象,保存在堆内存;
-
包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针;
-
从一个变量向另一个变量复制引用类型的值的时候,复制是引用指针,因此两个变量最终都指向同一个对象。
例如://值类型 var val1=10; var val2=val1; val2=12; console.log("val1值为:"+val1); console.log("val2值为:"+val2); //引用类型 var zs={ name:"张三", age:23, work:"开除" } var ls=zs; ls.name="lisi"; console.log("zs.name值为:"+zs.name); console.log("zs.name值为:"+ls.name);
结果:
2、面向对象与面向过程
-
面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊;
-
面向对象就是找一个对象,指挥得结果;
-
面向对象将执行者转变成指挥者;
-
面向对象不是面向过程的替代,而是面向过程的封装。
例如:
面向过程://面想过程: var sty1={ name:"小军", score:550 } var sty2={ name:"小李", score:670 } priScore(sty1); priScore(sty2); //创建一个函数输出每一个变量的内容,每一个变量调用这个函数就会输出变量所对应的内容 function priScore(stud){ console.log("姓名:"+stud.name+"\n成绩:"+stud.score); }
面向对象://面向对象 /* 创建一个对象, 作用:计算总人数,男生总人数,女生总人数 */ var tongJi={ total:0,//总人数 boyTotal:0, girlTotal:0, shuchuTotal:function(){ console.log("总人数"+this.total+"\n男生总人数"+this.boyTotal+"\n女生总人数"+this.girlTotal); } } //创建变量的时候调用函数Student,在调用里面shuchuContent()属性就可以输出; var student3=new Student("小明",666,"男") var student4=new Student("小张",555,"女") student3.shuchuContent(); student4.shuchuContent(); tongJi.shuchuTotal(); /* 创建一个面向对象函数; 功能:即可以根据参数添加,也可以调用里面的属性。 */ function Student(name,score,sex){ tongJi.total++; this.name=name; this.score=score; this.sex=sex; if(sex=="男"){ tongJi.boyTotal++; } else if(sex=="女"){ tongJi.girlTotal++; } this.shuchuContent=function(){ console.log("姓名:"+this.name+"\n成绩:"+this.score); } }