全局作用域
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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix