LET 和 VAR 的区别?及其LET 和 CONST 的区别?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、LET 和 VAR

  • @1 变量提升: let不存在变量提升、而var是具备变量提升的
console.log(n); //Uncaught ReferenceError: Cannot access 'n' before initialization 词法分析阶段,我们就知道未来在全局上下文中会基于let声明一个n的变量,所以此时报错是:不允许在声明之前使用他...
console.log(m); //undefined
let n = 10;
var m = 20; 

注 :在所有操作之前,首先要进行的第一个操作”词法分析“ 生成词法解析树 AST,我们就知道未来在全局上下文中会基于let声明一个n的变量,所以此时报错是:不允许在声明之前使用他…

  • @2 重复声明:
    let不允许重复声明「当前上下文中,不论当前变量基于何种方式声明过,都不允许再用let声明了」,一但重复声明,AST词法阶段都过不了,啥代码都不会执行;var不会重复声明,但是不会报错;
// 在词法分析阶段报错 Uncaught SyntaxError: Identifier 'n' has already been declared
console.log('OK');
let n = 10;
var n = 20; 
  • @3 和GO的关系:
    在全局上下文中,基于var/function声明的变量是放在GO中的「可以基于window.xxx去访问、也可以直接获取」;但是基于let/const声明的变量是放在VO(G)中的,和GO没关系!!
function(){
 let a = 1
 var b=2
}
//此时的a b都是当前上下文中得私有变量
  • @4 块级上下文:
    在除函数/对象的大括号外,如果括号中出现let/const/function会产生块级私有上下文,而且声明的变量也是块中的私有变量;但是var既不会产生块上下文,块上下文也不会对其产生影响!!

  • @5 暂时性死去问题

console.log(typeof n); //undefined 基于typeof检测一个未被声明的变量,结果不会报错,而是“undefined”

console.log(typeof n); //Uncaught ReferenceError: Cannot access 'n' before initialization
let n = 20; 

二、LET 和 CONST 的区别

LET声明的是变量「对」
CONST声明的是常量「不准确」:CONST声明的也是变量,只不过不允许重新关联其它的值(不允许指针重新指向)

代码如下(示例):

const obj = {
    name: 'zhufeng'
};
obj.name = '哈哈哈';
console.log(obj); 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值