JS 中全局与局部作用域中有关的变量提升的小考点

示例:

	var a = 1;
	(function() {
	  console.log(a);
	  let a = 2;
	})()

在这里插入图片描述

理解:
  • JS 引擎在进入预编译阶段时,每进入到一个不同的运行环境都会创建 一个相应的执行上下文(execution context),若该环境内有对应的变量,则不会往外找,本例的立即执行函数中检测到 let a = 2,故不会往外找 a 变量;
  • 进入执行阶段,执行立即函数过程中,变量 a 未声明就直接调用,所以报 ReferenceError(在作用域中找不到)的错误

参考文章:
① JavaScript中的ReferenceError和TypeError两种错误的区别
② (一)js引擎执行的过程的理解–语法分析和预编译阶段
③ var,let,const三者的特点和区别
④ 函数声明与函数表达式的提升问题

你可能感兴趣的:(js,细节详解,javascript,前端)