JavaScript中的全局变量和局部变量的理解

JavaScript中的全局变量和局部变量的理解,接下来看这么一个例子

<script>
 		var a = 100;
 	 	function test(){
 	    console.log(a);
 	    var a = 10;
 	    console.log(a);
 	 	}
 	 	test();
</script>
运行结果:
undefined
10

为什么会出现这种结果?为什么不是100 10?明明在test()函数外面定义了一个全局变量a = 100?
原理

  • 一个页面里直接定义在script标签下的变量是全局变量即属于window对象的变量,按照javascript作用域链的原理,当一个变量在当前作用域下找不到该变量的定义,那么javascript引擎就会沿着作用域链往上找直到在全局作用域里查找。

  • 首先这段程序涉及到了以下三个概念 执行环境 变量对象 作用域链
    js的执行环境分全局的(浏览器的话就是window执行环境)和function执行环境,变量对象是用来保存执行环境下的变量和方法的,而作用域链上放着一个一个的变量对象形成一个链条。

  • 这段代码的执行过程应该是这样的 首先进入全局执行环境 建立该执行环境下的变量对象A(保存有该执行环境下的x和一个匿名方法),再往下执行到匿名方法的执行环境 建立变量对象B(保存有该执行环境下的x),而js的当前执行环境的变量对象永远放在作用域链的最前端,所在执行第一个console.log(a), 就会找当前执行环境的变量对象B是否保存有x, 而事实上是有的var a = 10,但console.log(a)之前没有给x赋值,所出得到的结果就是undefined, 如果变量对象B中不存在x,那么程序就会顺着作用域链找上一个变量对象A里是否有x.

发布了24 篇原创文章 · 获赞 5 · 访问量 3657

猜你喜欢

转载自blog.csdn.net/qq_44756000/article/details/89392650