window 是最大最外围的执行环境,然后每个函数都有自己的执行环境。JS代码是从上到下执行的,单纯的用语言描述可能会有点绕,而且不大直观。我们看着代码来

        console.log('global begin:' + i);  

        var i = 1

        foo(1)

        function foo(i){
if(i == 4){
return
}
console.log('foo() begin:' + i);
foo(i+1)
console.log('foo() end:' + i); } console.log('global end:' + i);

上面代码依次输出的是什么?

一进来先是  window 执行环境,然后 window 会把先把里面的变量和函数提升,然后在从上到下执行。到 foo(1)时 会创建一个 foo的执行环境,然后就会去执行函数,在这应该都没有问题。 当 i= 3的时候执行的是 foo(4)满足条件,直接退出。执行

console.log('foo() end:' + i);  // 3   重点就在这为什么是 3
就是这个执行环境在作怪,每次调用函数都会创建一个执行上下文环境,并把这个执行函数推进了栈里面,只有这个函数完全执行完毕了这个环境才会被释放的,因为之前的函数并没有执行完
console.log('foo() end:' + i);     这个还没有执行,所以他们会被一直保存在栈中。栈有一个特点就是后进先出

这个就是执行 foo(4)时的栈,foo(4)执行完了被释放,我们就执行foo(3)剩余的东西,直到把 foo 函数都执行完,栈里面就只剩下  window 了。只有关闭浏览器窗口的时候window才会被释放。

作用域链:其实每个执行环境都对应了一个变量对象,这个变量对象中就保存了当前环境中定义的所有变量和函数。当代码在一个环境中执行的时候就会创建变量对象的一个作用域链。如果是函数,他的对象是活动对象,最开始的时候只包含了一个 arguments ,他的作用域链中的下一个变量对象就是包含他的环境,就这样一层一层下去,直到最底层的 window

能力有限,表达的可能不是很清楚,如果有什么不对的请指正

												

JS中的执行环境和作用域的更多相关文章

  1. js中的执行环境及作用域

    最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执 ...

  2. js中的执行环境和作用域链

    首先介绍一些即将用到的概念: 执行环境:  它定义了变量和函数有权访问其他数据的范围,每一个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个变量对象中.   所有javasc ...

  3. 【JS】JavaScript中的执行环境与作用域

    JavaScript中的执行环境定义了变量或函数有权访问的数据(每个函数都有自己的执行环境),全局执行环境是最外围的执行环境,在浏览器中,全局执行环境就是window对象,所以所有的全局变量和函数都是 ...

  4. JS执行环境,作用域链及非块状作用域

    JS中的执行环境,顾名思义就是变量或函数所执行时的环境.在我的理解中,执行环境和作用域相差不大. 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中.而在函数执行之后 ...

  5. JavaScript中变量、执行环境、作用域与C#中的异同

    首先需要明确一个执行环境的概念,执行环境这个概念是用来理解作用域的,在js中,执行环境分为全局执行环境和局部(function)执行环境,而在C#这类的C类语言中,还有一个块级别的执行环境,如if语句 ...

  6. 深入理解javascript中执行环境(作用域)与作用域链

    深入理解javascript中执行环境(作用域)与作用域链 相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行 ...

  7. JavaScript之一: 闭包、执行环境、作用域链

    这是大虾的第一篇博文,大虾试图用最直白的语言去描述出所理解的东西,大虾是菜鸟,水平有限,有误的地方希望路过的朋友们务必指正,谢谢大家了. 从读书时代一路走来,大虾在学习的时候逐渐喜欢上了去追寻根源,这 ...

  8. 【repost】 原生JS执行环境与作用域深入理解

    首先,我们要知道执行环境和作用域是两个完全不同的概念. 函数的每次调用都有与之紧密相关的作用域和执行环境.从根本上来说,作用域是基于函数的,而执行环境是基于对象的(例如:全局执行环境即window对象 ...

  9. js执行环境、作用域

    js执行环境.作用域 执行环境:是javascript中的一个重要的概念,<javascript高级程序设计第三版>的定义是:执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行 ...

随机推荐

  1. tomcat入门(一)几种常见的使用tomcat部署项目的方式

    1.常规方式部署 直接把web项目复制到tomcat安装目录下的%Tomcat_Home%/webapps/{web项目} 2.使用控制台进行部署 若一个web应用结构为D:\workspace\We ...

  2. TCP/IP协议<二>

    一.TCP/IP的标准化 1.TCP/IP的含义 一般来说,TCP/IP是利用IP进行通信时所必须用到的协议群的统称. 具体点,IP或ICMP.TCP或UDP.TELENT或FTP.以及HTTP等都属 ...

  3. 浅谈soa之RESTful

    今晚打算花点时间整理一下面向服务的架构oap.1传统中小型项目架构一般是这样的:(java)html+servlet+jdbc.和(.net)html+handler+ado.net都是在一台应用来. ...

  4. 性能测试工具Jmeter10-Jmeter集合点与关联

    集合点 操作步骤: 注意:集合点要放在需要集合的元件前面 关联 正则表达式提取器 配置说明 引用名称:下一个请求要引用的参数名称,如token,则可用${token}引用它 正则表达式: () 括起来 ...

  5. Linux禁ping

    A.临时允许PING操作的命令为:# >/proc/sys/net/ipv4/icmp_echo_ignore_all B.永久允许PING配置方法. /etc/sysctl.conf 中增加一 ...

  6. 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02

    上一篇博文我们讲了如何看到实验结果,这篇博文我们着重分析源代码. 书中作者为了说明原理,约定了一种比较简单地用户程序头部格式,示意图如下(我参考原书图8-15绘制的,左边的数字表示偏移地址): 所以, ...

  7. hduoj 2546饭卡

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. 将BufferedImage转换为InputStream,亲测可用

    private static final Logger logger = Logger.getLogger(Demo.class); /** * 将BufferedImage转换为InputStrea ...

  9. Spring-cloud学习线路

    学习本学习路线学习完,大家将会对微服务.Spring Cloud.Docker.Kubernetes有一个系统.全面的认识.通过学习,将能掌握相关的知识体系,并能够投入到项目实战中去. 本学习路线采用 ...

  10. EF Core 2.1 +数据库视图

    1.参考文档 https://stackoverflow.com/questions/36012616/working-with-sql-views-in-entity-framework-core ...