批改状态:未批改
老师批语:
答:值传递与引用传递使用场景有两种:
值传递:
简单数据类型(int , string, bool …)赋值传递:
let a=1;let b=a;a=100;console.log(a);//=>100console.log(b);//=>1
数据单元是独享的
引用传递的数据类型是对象和数组:
let o={a:1,b:2};let oo=o;console.log(oo);//=>{a:1,b:2}oo.a=100;console.log(o);//=>{a:100,b:2}//证明引用传递发生console.log(oo);//=>{a:100,b:2}//证明引用传递发生
注意:
demo1:
oo={};//值传递console.log(o);//=>{a:100,b:2}demo2:o={};//值传递console.log(oo);//=>{a:100,b:2}
参数传递:
赋值传递参数:进行的是值传递
let sum=a=>(a=10);let y=100;sum(y);//=>10console.log(y);//=>100
引用传递参数:
let sum=x=>(x.a=1000);let y={a:1,b:2};sum(y);//=>{a:1000,b:2}console.log(y);//=>{a:1000,b:2} //引用传值发生
再看:
let sum=x=>(x={});let y={a:1,b:2};sum(y);//=>{}//单独指向,没有影响到引用值console.log(y);//=>{a:1,b:2} //保持不变
但是引用传值已经发生
和老师上课讲的不一致
答:解构赋值:快速从集合数据中解析出独立变量
数组解构:
let [a,b,c]=[1,2,3];console.log('a=%d,b=%d,c=%',a,b,c);let [a,b,c,d=[1,2,3,4,5cosnole.log(a,b,c,d);let [a,b,c]=[1,2,3];console.log('a=%d,b=%d,c=%',a,b,c);let [a,b]=[1,2,3];console.log(a,b);let [a,b,c,d]=[1,2,3];console.log(d)//=>未定义let [a,b,c,d='****']=[1,2,3];console.log(a,b,c,d)//=>1,2,3,****let [a,b,...c]=[1,2,3,4,5,6];console.log(a,b,c)//=>1,2,[3,4,5,6]let [,,a,,,]=[1,2,3,4,5,6];console.log(a)//=>3let x=1,y=2;[y,x]=[x,y]console.log(x,y);//实现x,y交换
对象解构:变量名要存在解构对象的属性名中。
let {name,email}={name:'zhangsan',email:'admin@126.com'}console.log(name,email);//=> zhangsan admin@126.com
重新开始:
let email="123456@qq.com";let {name,email}={name:"zhangsan",email:"admin@qq.com"};//=>报错,email重复定义({name,email}={name:"zhangsan",email:"admin@qq.com"});//强制定义重新开始:let email="123456@qq.com";let {name,email:userEmail}={name:"zhangsan",email:"admin@qq.com"};//定义别名解构
函数参数解构:
数组传参数的结构
let sum=([a,b])=>a+b;console.log(sum([10,20]));
对象传参数的结构
let getInfo=({name,age})=>[name,age];console.log(getInfo({name:'zhangsan',age:30}));
答:call()、apply()、bind() 都是用来重定义 this 的指向。
call,apply很类似,绑定后立即执行。bind绑定后返回函数声明,bind和call的传输参数一样,是多个的用逗号隔开,apply的参数则传递数组。
bind:
function my(name){this.name=name;console.log(this.name);}let y=my.bind({name:'例子'},'bind绑定')y();//=>bind绑定call:my.call({name:'例子'},'call绑定')//=>call绑定apply:my.apply({name:'例子'},['apply绑定'])//=>apply绑定
答:访问器属性就是把方法伪造成属性进行访问,通过get,set来设置。
例子:
const product={data:[{name:'小说',price:100,num:10},{name:'科幻',price:200,num:20},{name:'宇宙说',price:100,num:55},{name:'原子理论',price:300,num:1},],//访问器具属性get total(){return this.data.reduce((t,c)=>(t+=t+c.price*c.num),0)},set update(value){this.data[0].price=value;}}product.total//=>35300product.update=10
注意点:
访问器属性的名称和变量名冲突时,优先级:
访问器属性的优先级高于普通属性
答:
let mark=100;switch(true){case mark>=60 && mark<=80:console.log('及格');break;case mark>80 && mark<=100:console.log('学霸');break;case mark>100:console.log('非法数据');break;default:console.log('补考');}
答:简化了分支语句,返回结果:相对于if…else ,需要三个操作数。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号