let和const总结

本文深入探讨了JavaScript中变量提升的概念,对比了let与var声明变量的区别,并讲解了块级作用域的特点及其应用场景。

只在命令行所在的代码块中有效,使用let声明的变量在域解析的时候不会被提升

严格模式  'use strict'


let定义变量没有变量的提升(没有预解释)


console.log(a);//undefined 只声明未定义
var a=1;
console.log(a); //1


console.log(a);  a is not defined
let a=1;
console.log(a);//1 


var b=12;
var b=13;
function b(){
   console.log(b);
}
console.log(b);//13
b()  //报错


let b=12;
let b=13;
function b(){
  console.log(b)
}

console.log(b);  报错:Identifier 'b' has already been declared

注意:let定义得变量不能重复定义(不管函数还是let定义得变量都不可以得)



console.log(A);  报错:A未定义
let A=10;  
let A=12//报错'A' has already been declared

问题:上面为什么包下面错误呢?
虽然不进行预解释,但是代码执行前上来也是先将定义得变量提前过滤一遍的,一旦
发现不合法就直接报错的,代码也不会执行的


const 定义的是静态变量,是不能修改的,且必须赋值

不赋值就会报错:Missing initializer in const declaration

const g=10;
g=20; 不可以修改Assignment to constant variable
注意:不可以重复声明的

const g=20;//Identifier 'g' has already declared

let a=1;
const a=2;  //Identifier 'a' has already declared

注意:不管是动态变量还是静态变量,都是不可以重复声明的

let a=1;
{
  const a=2;
}  这样就不会报错了,里面的是私有作用域,不是同一个a


块级作用域
就是大括号,大括号包起来的都属于块级作用域

{} 是一个私有作用域,块级作用域

let a=10;
if(a){
  console.log(a);   //报错, a is not undefined
  let a=12;
  console.log(a);若放在下面就不报错
}


注意:
let oLis=document.getElementsByTagName("li");
for(var i=0;i<oLis.length;i++){
   oLis[i].onclick=function(){
     console.log(i);  //这样输出的都是4
  } 
}


for(let i=0;i<oLis.length;i++){
   oLis[i].onclick=function(){
     console.log(i);  //这样输出就都是正确的
  } 
}


let a=0;
function fn(){
  console.log(a);//报错
  let a=0;
}

let a=0;
function fn(){
  console.log(a);//不报错,输出0;
}

自执行函数
{
  let a=100;
  console.log(a);
}


let obj={};
//注意:eval将字符串转为对象的时候,一定要加上()

参考博客:https://blog.youkuaiyun.com/hdchangchang/article/details/78265351

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值