猫幻  

全局作用域

window对象和var的全局变量是相等的

因为window属性和var 的全局变量是等价的,只要设置了var的属性就是window的一个属性

window对象内设置属性,输出的是默认值,而不是undefined

var设置了window对象的内置属性作为变量,会直接覆盖

var name = 'mr.lee';
var设置了window属性,会直接覆盖
console.log(name);
console.log(window.name);
WebStorm环境无法识别 ,因为是node环境不支持对象

块级作用域

一层套一层
函数作用域,自我执行
{
function fn(){
console.log("块级函数");
}
}

fn()

es6之前在块级作用域内函数声明还是可以全局访问
 
{
    let fn=function(){
      console.log('块级函数');
    }
  fn();//只能在里面访问
}
fn();//外面找不到

数组解构

解构语法可以直接写

let info=['mr.lee',100,'男'];
let [name,age,gender]=info;数组赋值
let info=['mr.lee',100,'男'],解构赋值
第二种写法,当作一个变量来写
[name,age,gender]=info;
第三种写法,单行解构
let [name,age,gender]=['mr.lee',100,'男'];
这些写法必须一一完美匹配才能正确赋值
例子
let [name,age,gender]=['mr.lee',[100,'男']];//不对应上就会返回最后一个undefined
let [name,[age,gender]]=['mr.lee',[100,'男']];对应上
let [,,gender]=['mr.lee',100,'男'];//可以用逗号作为占位符不赋值
设置一个默认值,没有值时,会输出默认值
let [name,age,gender='男']=['mr.lee',100];
...  的语法
可以将没有赋值的内容都赋值给这个变量
let [name,...other]=['mr.lee',100,'男']

对象解构

第一种写法

例子

let obj={
    name:'Mr.lee',//对象自变量
    age:100
};
let {name,age}=obj;//进行解构
第二种写法
let obj={
    name:'Mr.lee',//对象自变量
    age:100
},name="Mr.wang";
({name,age}=obj);//被解构变量替代了
//第二种写法支持多变量
console.log(name);
console.log(age);
 
对象在进行解构时也可以设置默认值
let obj={
    name:'Mr.lee',//对象自变量
    age:100
};
let {name,age,gender='男'}=obj;//对象变量在进行解构时也可以设置默认值
console.log(gender);
 
通过键值对的方式改变变量名
let obj={
    name:'Mr.lee',//对象自变量
    age:100
};

let {name:myname,age:myage,gender='男'}=obj;//name失效
//通过键值对的方式更改变量名
console.log(myname);
console.log(myage);
console.log(gender);
 
解构的时候最终从属于最里面的
let obj={
    name:'Mr.lee',//对象自变量
    age:100
    info:{
        id:1,
        gender:'男'
    }
};

let {info:{id,gender}}=obj;
//console.log(info.id);//{info:{id,gender}}=obj会失效
console.log(id);//解构的时候最终从属于最里面的
console.log(gender);//info:{id,gender}解构的时候最终是里面的值
 
对象解构也支持在一行上写(简写模式)
let{name,age}={name:"Mr.lee",age:100};
常用的解构

let key=1,
value='Mr.lee';
[key,value]=[value,key];//这种方法比较常用很实用就是切换麻烦
console.log(key+value);
数组直接赋值
function fn(){
    return['Mr.lee',100,'男'];
}
let [name,age,gender]=fn();
console.log(name);
 
函数进行参数传递时可以进行数组和对象字面量的方式传参数;
function fn2(){
    return{
        name:'Mr.lee',
        age:100,
        gender:'男'
    };
}返回的是个对象之间的函数返回给它解构
let {name,age,gender}=fn2();
console.log(name);


函数进行参数传递时可以进行数组和对象字面量的方式传参数
function fn([name,age,gender]){
    console.log(name);
}//数组里面自动解构
fn(['Mr.lee','100','男']);


function fn2([name,age,gender]){
    console.log(name);
}//对象里面自动解构
fn2({
    name:'Mr.lee',
    age:100,
    gender:'男'
});
 
字符串也可以解构
let [x,y,z]='ABC';
console.log(y);
 
let{length:len}='ABC';//'ABC'求助length属性给len
console.log(len);
posted on 2021-11-24 17:01  猫幻  阅读(26)  评论(0编辑  收藏  举报