JS Let和Var的区别

let所在的代码块有效
var有变量提升

作用域与全局变量

var a = [];
for(let i = 0;i<5;i++){
  a[i] = function(){
  console.log(i);
  }
}
a[3]();//3
var a = [];
for(var i = 0;i<5;i++){
  a[i] = function(){
  console.log(i);
  }
}
a[3]();//5

这是为什么,因为let仅在所在作用域有效,即每次循环中,所以每个循环都创建了一个新的变量i,给其赋值。
而var声明后在全局有效,此时i在5次循环后自加变成了5,所以输出的是5。
另外:
通过let的特性,我们还可以发现for的一个性质:

for(let i = 0;i<3;i++){
  let i = "a";
  console.log(i);
}
//a
//a
//a

不难发现两个i所处的作用域不同,for循环所在的作用域是父作用域,而每个循环体内的是子作用域。此时读取变量是从当前作用域着手,寻找不到后再寻求更高一级的作用域。

变量提升

console.log(a);//undefined
var a = 1;
console.log(b);//报错ReferenceError
let b = 1;

var在声明前即可使用,这就是变量提升,因为声明前未赋值,所以输出为undefined。let则直接报错。

暂时性死区

倘若上级作用域有出现同名变量,let会将所在作用域的同名变量锁住,在该变量未声明前所有对同名变量的操作都会报错。

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}

总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

注意:此时typeof也会报错了

不允许重复声明

let不能在同一作用域重复声明一个变量,否则会报错。

// 报错
function func() {
  let a = 10;
  var a = 1;
}

// 报错
function func() {
  let a = 10;
  let a = 1;
}

函数内不能重复声明变量,案例如下:

function func(arg) {
  let arg;
}
func() // 报错

function func(arg) {
  {
    let arg;
  }
}
func() // 不报错
### Git推送遇到的网络错误解决方案 当执行`git push`命令如果遇到了网络错误,可以尝试以下几种方法来解决问题。 #### 修改远程仓库URL以包含认证信息 对于HTTP(S)协议下由于权限不足导致无法推送到远程仓库的情况,可以在`.git/config`文件中的`[remote "origin"]`部分对应的`url`前加上用户名和密码。例如,在GitLab上,应确保该用户具有足够的权限(如Owner或Master),而不仅仅是Guest、Reporter或Developer角色[^3]。 #### 调整缓冲区大小 有因为数据量较大而导致传输失败,可以通过调整POST buffer size参数来解决这个问题。增加缓存大小有助于减少因大文件上传引起的连接中断风险: ```bash git config http.postBuffer 524288000 ``` 此配置增大了默认情况下用于发送post请求的最大字节数至大约500MB左右[^2]。 #### 更改Remote URL为SSH方式 如果当前使用的HTTPS链接总是出现问题,考虑切换到通过SSH方式进行身份验证。这通常更加稳定可靠,并且不需要每次都输入账号密码。首先确认本地已正确设置了SSH key并添加到了目标平台账户里;接着移除现有的remote地址再重新指定新的ssh形式的remote路径: ```bash git remote rm origin git remote add origin git@git.oschina.net:MaGary/SpringMVC.git ``` 上述命令适用于OSChina网上的项目实例[^1]。 #### 使用代理服务器 如果你所在的环境对外部访问有限制或者存在防火墙阻挡,那么设置合适的proxy可能会有所帮助。比如公司内部网络环境下可能需要配置http_proxy环境变量指向企业级web proxy服务端口。 ```bash export http_proxy=http://your-proxy-server:port/ export https_proxy=https://your-proxy-server:port/ ``` 这些措施能够有效缓解由不同原因引发的各种类型的git push网络异常状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值