JS基础--执行环境及作用域

一、执行环境

  执行环境定义了变量或函数有权访问的其他数据,决定了它们的各自行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

  在Web浏览器中,全局执行环境被认为是window对象,因此所有全局变量好函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁(全局执行环境直到应用程序退出----例如关闭网页或浏览器时才会被销毁)

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

看示例代码:

var color = "blue";
function changeColor () {
    if (color === "blue") {
        color = "red";
    } else {
        color = "blue";
    }
}
changeColor();
alert ("Color is bow"+color);

上面的函数作用域链中包含两个对象:它自己的变量对象(其中定义着 arguments对象)和全局环境的变量对象。可以在函数内部访问到变量color,就是因为可以在这个作用域链中找到它。

var color = "blue";
function changeColr() {
    var anotherColor = “red";
    fucntion swapColors() {
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
        // 这里可以访问color、anotherColor和tempColor
    }
    // 这里可以访问color、anotherColor,但不能访问tempColor
    swapColors();
}
// 这里只能访问color
changeColor();

以上代码涉及3个执行环境:全局环境、changColor()的局部环境和swapColor()的局部环境。全局环境中 子执行环境可以访问父执行环境,父执行环境无权访问子执行环境

如图所示,内部环境可以通过作用域链访问所有的外部环境,但是外部环境不能访问内部环境中的任何变量合函数。这些环境之间的联系是线性、有次序的。每个环境都可以向上搜索作用域链,以查询变量和函数名;但任何环境都不能通过向下搜索作用域链而进入另一个执行环境。

时间: 2024-10-11 16:55:33

JS基础--执行环境及作用域的相关文章

js的执行环境和作用域链

执行环境 js的执行环境就是:定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个环境都有一个与之相关联的对象,环境中定义的变量和函数都保存在这个对象中. 全局变量就是最外围的环境,通常被认为是window对象.全局变量和局部变量会在环境栈中,当执行环境在执行完环境中的所有代码后会销毁,环境栈会将该栈弹出,定义的变量与函数也会被销毁,而全局变量会在程序退出后销毁. 作用域链 作用域是保证对执行环境有权访问  的所有变量  的有序访问. 链的形成: 作用域链的前端是当前执行环境的变量对象

JS复习—执行环境及作用域

执行环境及作用域 一.定义 (1)执行环境:执行环境定义了变量或函数有权访问其他数据,决定了它们各自的行为. (2)作用域链:保证对执行环境有权访问的所有变量和函数的有序访问.作用域链本质是一个指向变量对象的指针列表,它只是引用但不实际包含变量对象 (3)变量对象:环境中定义的所有变量和函数都保存在这个对象中 (4)活动对象:如果当前的环境是函数,则这个变量对象是活动对象 (5)作用域:程序代码中定义这个变量的区域 二.标示符的搜索过程 当某个函数被调用时,会创建一个执行环境及相应的作用域链.然

JavaScript之JS的执行环境和作用域

一.执行环境是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为,每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和数据都保存在这个对象中,我们无法访问这个变量对象,但是解析器在处理数据的时候会在后台中使用到它. 1.全局执行环境:全局执行环境是最外围的一个执行环境.在Web浏览器中全局执行环境被公认为是window对象,因为所有的全局变量和函数都是作为windows对象的属性和方法创建的.当某

JavaScript 中的执行环境、作用域(scope)以及变量提升(hoisting)

先看下面一段代码: var a = 0; alert("1st alert : a = " + a); function fun(){ alert("2nd alert : a = " + a); var a = 1; setTimeout(function(){ alert("3rd alert : a = " + a); a = 2; },1000); a = 3; setTimeout(function(){ alert("4th

js中的执行环境及作用域

最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据 ,决定了它们各自的行为.而每个执行环境都有一个与之相关的变量对象,环境中定义的所有变量和函数都保存在这个对象中. 理解了执行环境,现在就看看什么是作用域链吧.每个函数都有自己的执行环境,当代码在执行环境中执行时,就会创建变量对象的作用域链.作用域链保证了对执

浅谈JS执行环境及作用域

 今天刚刚开通博客,也是第一次写博文,略感紧张.作为一个表达能力弱弱的人来说,自己花三分钟理解一个知识点,当别人问起时,也许需要30分钟才只是让别人知道自己在说什么,一点也不夸张,希望在博客上可以练习对语言的组织能力并记录学习笔记与大家一起交流. 进入正题>> 首先,相关的概念定义如下: 1. 执行环境: 所有 JavaScript 代码都是在一个执行环境中被执行的.执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域.生存期等方面的处理,它定义了变量或函数有权访问的其他数

js基础梳理-如何理解作用域和作用域链?

本文重点是要梳理执行上下文的生命周期中的建立作用域链,在此之前,先回顾下关于作用域的一些知识. 1.什么是作用域(scope)? 在<JavaScritp高级程序设计>中并没有找到确切的关于作用域的定义,只是在"4.2执行环境及作用域"中简单说了下执行环境(execution context)的概念.而执行环境其实就是之前博客:js基础梳理-究竟什么是执行上下文栈(执行栈),执行上下文(可执行代码)?中的执行上下文. 而在<JavaScript权威指南>中,对作

执行环境,作用域

在javascript的学习中,执行环境.作用域是2个非常非常重要和基本的概念,理解了这2个概念对于javsacript中很多脚本的运行结果就能明白其中的道理了,比如搞清作用域和执行环境对于闭包的理解至关重要. 一.执行环境(exection context,也有称之为执行上下文) 所有 JavaScript 代码都是在一个执行环境中被执行的.执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域.生存期等方面的处理,它定义了变量或函数是否有权访问其他数据,决定各自行为. 在j

VO、AO、执行环境和作用域链

1.变量对象(variable object) 原文:Every execution context has associated with it a variable object. Variables and functions declared in the source text are added as properties of the variable object. For function code, parameters are added as properties of