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. SourceInsight,Understand,SecureCRT设置

    SourceInsight 设置字体 Option/Document  Option/Screen  Fonts   Understand https://scitools.com/download/ ...

  2. density peak聚类算法

    一个ppt很好讲解了density peak算法的要义:https://pan.baidu.com/s/1oCR-gF1o1kfV-L7HnIa8og 算法来源自论文:Clustering by fa ...

  3. web.xml文件配置详解以及实例说明

    1.web.xml学名叫部署描述符文件,是在Servlet规范中定义的,是web应用的配置文件. 2.部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出 ...

  4. POJ 3164——Command Network——————【最小树形图、固定根】

    Command Network Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 15080   Accepted: 4331 ...

  5. elasticsearch增删改查crudp-----1

    Elasticsearch一些增删改查的总结 环境Centos7+Es 5.x 简单介绍下ES的原理: 1,索引  --相当于传统关系型数据库的database或schema 2,类型  --相当于传 ...

  6. codevs 1213 解的个数

    1213 解的个数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold       题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c = ...

  7. 在 Excel 中设置图片

    package com.smbea.demo.excel; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStr ...

  8. 浏览器警告:provisional headers are shown

    做项目的时候遇到一个问题 后台JAVA,每次发送的都有一次拦截,去转发到登录页面的url 有一个请求是https的,被拦截后显示发生了错误,浏览器警告:provisional headers are ...

  9. CSS3的Animation

    1.animation-name :动画名    2.animation-duration:时间    3.animation-delay:延时    4.animation-iteration-co ...

  10. scss牛刀小试:解决css中适配浏览器前缀问题

    在css中为适配浏览器,新特性总加 -webkit,-o, -moz 来适配浏览器,写的烦心,看着也臃肿,让css可读性降低,下面以阴影为例,如何使用scss让我们的css看起来更简洁. 本人使用的I ...