作用域

作用域(scope)

词条解释:一个变量的可用范围。
一个变量,并不是一定在所有的地方都能够访问到。变量可以划分为全局变量和局部变量。
全局变量:顾名思义,全局变量即在任何范围都能够访问到的变量,可以反复使用。特点:随处可见,可以反复使用。既然可以随处可见,反复使用,那么将会带来全局污染。
局部变量:只能在某一个范围内能够访问到的变量,仅在定义它的函数内部可以使用,不能够反复使用。

这里得提到函数的生命周期,关于函数的生命周期

  1. 在程序执行前在这里插入图片描述
    游览器会创建一个执行环境栈(ECS),里面会临时的保存正在执行的函数的执行空间,首先就会添加一个主方法main(),这个方法会创建出window对象,里面所存的变量也就是全局变量。比如这里的fun和a都是全局的,在任何地方都能访问到。
  2. 定义函数在这里插入图片描述
    创建了函数对象,并且封装起来,将地址赋值给了fun,而函数对象中存在一个scope属性,这个属性值指向的是创建函数时的作用域,在这里scope指向的则是window。
  3. 调用函数时
    在这里插入图片描述
    这个时候,在执行环境栈中就会创建一个执行空间记录执行的函数,同样会衍生出属于他的活动对象(AO),里面存放着调用fun函数需要用到的变量,比如这里的形参a,或者在函数体内var一个变量也会存在于fun的活动对象中,供fun使用。活动对象中有一个parent属性,这个属性引用的是fun函数的scope属性,指向了window,如果fun函数中用到的变量在AO中没有找到,那么将会在window中寻找。
  4. 调用函数后
    在这里插入图片描述
    在函数被调用执行完之后,会执行出栈,那么它将不在引用活动对象,而活动对象因为不再被任何对象引用而被垃圾回收小程序回收掉,也就是内存空间被释放掉,那么,在活动对象中存在的变量也将一同被释放掉。

为什么要说函数的生命周期呢,在最后一步中可以看到,如果函数被调用完毕,那么由它而生的变量也将一同被释放,说明这些变量的生命周期和函数的生命周期是一样的,而这些变量就是所谓的局部变量,只能在fun函数中调用到,在window中的变量则叫做全局变量。第三步可以看到,fun中用到却在fun的活动对象中找不到的,可以去window中找,这就构成了作用域链
在这里插入图片描述
在编程时,全局变量会造成全局污染,而作用域的优点正是为了解决这个弊端,作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值