javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系

发布时间:2019-01-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。

系列用了大量的篇幅讲解了上下文环境和作用域,有些人反映这两个是一回儿事。本文就用一个小例子来说明一下,作用域和上下文环境绝对不是一回事儿。

再说明之前,咱们先用简单的语言来概括一下这两个的区别。

00 上下文环境:

可以理解为一个看不见摸不着的对象(有若干个属性),虽然看不见摸不着,但确实实实在在存在的,因为所有的变量都在里面存储着,要不然咱们定义的变量在哪里存?

另外,对于函数来说,上下文环境是在调用时创建的,这个很好理解。拿参数做例子,你不调用函数,我哪儿知道你要给我传什么参数?

01 作用域:

首先,它很抽象。第二,记住一句话:除了全局作用域,只有函数才能创建作用域。创建一个函数就创建了一个作用域,无论你调用不调用,函数只要创建了,它就有独立的作用域,就有自己的一个“地盘”。

02 两者:

一个作用域下可能包含若干个上下文环境。有可能从来没有过上下文环境(函数从来就没有被调用过);有可能有过,现在函数被调用完毕后,上下文环境被销毁了;有可能同时存在一个或多个(闭包)。

上面的文字不理解没关系,且看下面的例子。

第一,除了全局作用域外,每个函数都要创建一个作用域。作用域之间的变量是相互独立的。因此,全局作用域中的x和fn作用域中的x,两者毫无关系,互不影响,和平相处。

javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系

<"https://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CrXatv6jrLPM0PLWtNDQ1q7HsKOsu+HJ+rPJyKu+1snPz8LOxLu3vrOjrLKi1NqzzNDy1rTQ0Mqxo6y21Mbk1tC1xLHkwb+4syyjMjA1NDA7oam8L3A+CjxwPgo8aW1nIHNyYz0="https://www.2cto.COM/uploaDFile/Collfiles/20140930/20140930092314194.png" alt="/">

第三,程序执行到第17行,调用fn(5),会产生fn(5)的上下文环境,并压栈,并设置为活动状态。

javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系

第四,执行完第17行,fn(5)的返回&#20540;赋值给了F1。此时执行上下文环境又重新回到全局,但是fn(5)的上下文环境不能就此销毁,因为其中有闭包的引用(可翻看前面文章,此处不再赘述)。

javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系

第五,继续执行第18行,再次调用fn函数――fn(10)。产生fn(5)的上下文环境,并压栈,并设置为活动状态。但是此时fn(5)的上下文环境还在内存中――一个作用域下同时存在两个上下文环境。

javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系

解读视频》《json2.js源码解读视频》

--------------------------------------------------------------------------

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦!&nbsp;js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系全部内容,希望文章能够帮你解决javascript代码实例教程-深入理解javascript原型和闭包(18)――补充:上下文环境和作用域的关系所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。