专栏首页coding个人笔记作用域、执行环境、作用域链

作用域、执行环境、作用域链

作用域,之前有介绍过,JavaScript无块级作用域,只有函数作用域,简单点说就是JavaScript的作用域就是函数作用域。因为有函数作用域,所以我们有全局作用域和局部作用域的说法。

执行环境是什么?执行环境定义了变量或函数有权访问的其他数据,每个执行环境都有一个与之关联的虚拟的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

简单说就是每一个函数就有一个执行环境,函数里面的变量和函数都要通过这个函数去访问。对于外部环境来说,每一个函数也是一个变量对象。每一个函数都有一个初始化的argument变量。

JavaScript中最大的全局执行环境是window,执行环境要在所有代码执行完毕才会被销毁,而全局执行环境window只有关闭网页或者关闭浏览器才被销毁。

当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。

讲的有点抽象了,通过代码或许更直观:

<script>
    var a = 5;
    function fun1() {
        console.log(arguments)
    }
</script>

全局作用域window,局部作用域fun1,;全局执行环境window,局部执行环境fun1;window有自己的变量对象,就是window本身,window可以通过这个变量对象去访问变量a和变量对象fun1。

当fun1执行的时候创建了一个作用域链,所以fun1有两个变量对象,一个是自己,一个是全局环境的变量对象window。fun1可以在函数内部访问变量a,因为fun1所在的作用域链可以找到变量a。

再比如:

var a = 5;
function fun1() {
    var b = 6;
    function fun2() {
        var c = 7;
    }
}

这段代码有三个执行环境:全局环境window、局部环境fun1、局部环境fun2;

全局环境Window有一个变量a和一个函数fun1;

局部环境fun1有一个变量b和一个函数fun2,但是fun1可以访问全局环境的变量a;

局部环境fun2有一个变量c,但是fun2可以访问fun1环境中的变量b和全局环境的变量a;

这就是作用域链,作用域链中的内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。作用域链中,每一个局部环境都会首先寻找自身环境中的属性和方法,搜索到了就停止寻找,没有找到再向上搜索直到最外层window还搜索不到就报错。

(完)

本文分享自微信公众号 - coding个人笔记(gh_2ce38b49dae1),作者:wade

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 递归尾调用优化

    尾调用(Tail Call)是函数式编程的一个重要概念,就是指某个函数的最后一步是return调用另一个函数。

    wade
  • React菜鸡入门感触

    这星期在上手react,之前一直觉得js写的还行,上手这个框架应该问题不大。结果就是感觉自己就像个弟弟一样,简单的东西都一遍又一遍的看。

    wade
  • Express简单起一个本地服务接口

    有时候我们开发过程中,需要一个接口调试,但是又不想很麻烦的要一个后台,就想很快的简单的有一个接口。今天分享使用node的express很简单的起一个服务。当然,...

    wade
  • 记录Eclipse中springMvc、ssm项目HTTP Status 404 – Not Found

    最近突然发现前段时间鼓捣的web项目demo死掉了,死活访问不了,还报HTTP Status 404 – Not Found,The origin server...

    紫兮木溪
  • 【图文学习】小程序新手体验:如何快速在本地运行小程序及后台

    记录一下本小白在学习本地搭建小程序开发环境时的步骤,下面是已经本地编好后上线了的版本:

    cocoacat
  • 披荆斩棘:论百万级服务器反入侵场景的混沌工程实践

    在繁杂的业务和网络环境下,在公司百万级服务器面前,要做到入侵发生时的及时检测,那么反入侵系统的有效性,即系统质量,是至关重要的。

    腾讯安全应急响应中心
  • 披荆斩棘:论百万级服务器反入侵场景的混沌工程实践

    在繁杂的业务和网络环境下,在公司百万级服务器面前,要做到入侵发生时的及时检测,那么反入侵系统的有效性,即系统质量,是至关重要的。

    腾讯技术工程官方号
  • 靶机渗透DC-6

    DC-5关卡存了稿,但是不知道为什么再打开靶机继续写的时候日志文件怎么都读取不到,尝试了重装,还是不行,暂时还不知道到底毛病出在哪里······只好先放下这关,...

    HipHip
  • 破解第一个Android程序

    破解Android程序的方法通常是:使用ApkTool反编译APK文件,生成smali格式的反汇编代码;通过阅读smali文件的代码来理解程序的运行机制,找到突...

    用户1631416
  • 【DeepMind最新Nature论文】探索人类行为中的强化学习机制

    【新智元导读】DeepMind与来自普林斯顿、NYU、达特茅斯学院、UCL和哈佛大学的研究人员合作,探索了人类行为中的强化学习,为开发智能体强化学习提供了新的策...

    新智元

扫码关注云+社区

领取腾讯云代金券