js_var let const 和变量提升

变量提升:

变量提升,是指在 JavaScript 代码执行过程中,JavaScript 引擎把变量的声明部分和函数的声明部分提升到代码开头的“行为”。变量被提升后,会给变量设置默认值undefined。
在这里插入图片描述
变量提升带来的问题

  1. 变量覆盖
var myname = "极客时间"
function showName(){
  console.log(myname);
  if(0){
   var myname = "极客邦"
  }
  console.log(myname);//undefined
}
showName()
  1. 本应销毁的变量没有被销毁(变量污染)
function foo(){
  for (var i = 0; i < 7; i++) {
  }
  console.log(i); //7
}
foo()

JavaScript 引擎是如何同时支持变量提升和块级作用域的
(let、const)块级作用域是通过词法环境的栈结构来实现的,而变量提升是通过变量环境来实现。

var let const 区别:

①var声明的范围是函数作用域(即包含var的函数的局部变量),let和const都是块作用域
②var声明的变量会自动提升到包含它的函数顶部,但是赋值不会提升,所以打印的话会显示undefined。let声明的变量不会在作用域中被提升。暂时性死区:在区块内,let声明此变量之前,该变量虽已存在但都不可用。
③var可以重复声明,let不允许重复声明。
const与let行为基本相同,唯一重要区别是在声明同时必须初始化,且值不可改变。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值