Javascript中的执行环境和作用域细讲

对每一个初学js的小伙伴来说,执行环境和作用域都是比较难理解的,而要真正理解这些复杂的概念,就必须不断去看,不断去实践,从中发现和总结其中的规律。

首先,我先讲一下执行环境。要理解执行环境,需要理解js引擎中关于变量的声明和提升。在js引擎中,变量分为全局变量、局部变量和私有变量。其中全局

量就是在全局中定义的变量,即是在一开始和函数外定义的。局部变量是在函数内部定义的变量。私有变量从一定程度上讲其实就是局部变量,私有变量包括函数

参数、局部变量和在函数内部定义的其他函数。由于js(除了ES6外)只有函数作用域,没有块级作用域,所以在函数外没有权限访问得到私有变量。理解了变量的

明和分类之后,下面我们来了解一下变量的提升。js中的变量在引用前需要经过三个步骤,分别是变量的声明、提升、初始化。而在js引擎中,变量的提升就是在声

变量后先把变量名提升到全局作用域前面或者函数内部的顶部。在提升完变量后,接着就是变量的初始化,即是变量的赋值。

有了变量的相关概念之后,下面我们来讲执行环境。执行环境是js引擎中的一种概念,是运行中的函数的意思,它不是对象,要区别于执行环境对象(执行环境

对象是指js引擎中把变量作为属性保存在一个对象中,这个对象就叫执行环境对象)。而执行环境是在函数执行时产生的,所有在函数中定义的变量和函数都是执行

环境中的一部分。如果在一个函数中还有函数(即是闭包),那么在父函数执行时就会先产生一个执行环境(这里称为父执行环境),当执行到父函数内部的子函

A时又会产生一个执行环境(这里称为子执行环境A),假如父函数里面还有一个子函数B,那么当子函数A执行完后,又会执行子函数B,又会产生一个子执行

(这里称为子执行环境B)。子执行环境可以访问到父执行环境里面的变量,要注意此时一定要求这个子执行环境在它的父执行环境中,如果在别的父执行环

或者全局执行环境是访问不到的。而兄弟执行环境(这里指执行环境A和执行环境B)相互之间是不能访问得到变量的。到此,执行环境就讲完了,不知道你有

有理解呢,可能概念会有点绕,但是只要把握住执行环境就是函数范围就可以了,利用范围概念去理解,不在这个范围内就访问不到。

接下来,我们就要讲作用域了。其实前面对作用域也讲了一部分。讲作用域之前,我们需要理解一个概念,作用域就是一条作用链,沿着这条链去访问变

量。作用域分为全局作用域和局部作用域。全局作用域的级别比局部作用域的高,在访问变量时,先是访问局部作用域,如果局部作用域找不到,再去找全局作用

域。作用域也是可以嵌套的。局部作用域广义上就是函数作用域,因为js没有块级作用域。

到此,我就讲完了js的执行环境和作用域,希望对你有一定的帮助,可以让你更加理解js的内层。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值