let和const总结


只在命令行所在的代码块中有效,使用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.csdn.net/hdchangchang/article/details/78265351

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: constlet 是 JavaScript 中两种声明变量的方式。 const 用于声明一个常量,即不可改变的变量。这意味着你不能再次对常量进行赋值,否则会抛出一个错误。但是,如果常量声明的是一个对象,你仍然可以修改对象的属性。 let 用于声明一个变量,允许你对变量进行重新赋值。 因此,主要区别在于,const 声明的变量不能被重新赋值,而 let 声明的变量可以被重新赋值。 示例: ``` const a = 1; a = 2; // 会抛出一个错误 let b = 1; b = 2; // 不会抛出错误 ``` 另外,const 声明的常量也必须在声明时进行初始化,而 let 声明的变量可以在声明之后再进行初始化。 示例: ``` const c; // 会抛出一个错误,因为 c 没有被初始化 let d; // 不会抛出错误,因为 d 可以在声明之后进行初始化 d = 1; ``` ### 回答2: constlet是JavaScript中用来声明变量的关键字,它们的主要区别如下: 1. 声明方式不同:const用于声明一个常量,而let用于声明一个块级作用域的变量。 2. 变量的赋值:使用const声明的变量必须在声明时赋值,且一旦赋值后就不能再改变其值。而使用let声明的变量可以在声明时赋值,也可以在后续过程中重新赋值。 3. 块级作用域:使用constlet声明的变量在块级作用域内有效。块级作用域是指由一对花括号{}包裹的代码块,如if语句、循环等。在块级作用域内,使用constlet声明的变量只在该作用域中可见,外部作用域无法访问。 4. 变量提升:使用let声明的变量不会被提升至当前作用域的顶部,而是在声明的位置被绑定。这意味着在变量声明之前访问可能会导致引用错误。而使用const声明的变量也不会被提升,但在声明之前访问会报错。 5. 全局作用域:在全局作用域中使用letconst声明的变量不会成为全局对象的属性,不会被window对象所拥有。 总的来说,const用于声明常量,一旦赋值后不能再修改;而let用于声明可变的变量,在块级作用域内有效。 ### 回答3: constlet是用于声明变量的关键字,它们在JavaScript中有以下区别: 1. 作用域:const声明的变量具有块级作用域,只在声明的块内有效,而let声明的变量也具有块级作用域,但在声明之前,无法访问该变量。 2. 变量赋值:const声明的变量必须被赋予一个初始值,并且一旦赋值后,不能再对其重新赋值。而let声明的变量可以在声明之后进行赋值操作。 3. 变量的修改:const声明的变量不能被修改,即使它是一个对象或数组,也不能更改其引用地址。而let声明的变量可以被修改。 4. 提升:let声明的变量不会被提升到它们所在的块的顶部,即在声明之前使用会产生暂时性死区(Temporal Dead Zone)的错误。而const声明的变量也存在暂时性死区,但在作用域内不能重新声明同名变量。 5. 变量生命周期:const声明的变量在声明的块中存在,而let声明的变量在声明的块以及其子块中存在。 总结来说,const用于声明常量,其值在声明后不可更改,且必须初始化。而let用于声明可变的变量,其值可以在声明后重新赋值。根据需求,我们可以选择使用其中的一个关键字来声明变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值