4.2 执行环境和作用域

执行环境和作用域

每个函数都有自己的执行环境

作用域链(scope chain)

作用:保证执行环境有权访问的所有变量和函数的有序访问。

理解:以函数为界限,每个函数都有自己的变量对象,自己界限的变量是可以访问的。也可以访问外围包围住这个函数里面的变量。但是大(外围)函数不能访问此函数里面的变量。函数执行完会被销毁。

每个函数有自己的执行环境,当执行流进入一个函数的时候,函数的环境就会被推入到一个环境栈中。而函数执行完后,栈就会将其环境弹出。

内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数

var color = "blue";
function changeColor(){
    var anotherColor = "red";

    function swapColors(){
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
        l(color);
        l(anotherColor);
        l(tempColor);
    }
    l(color);
    l(anotherColor);
    swapColors();
}
l(color);
changeColor();

延长作用域链(try-catch catch, with)

function buildUrl(){
    var qs = "?debug=true";
    with(location){
        var url = href + qs;
    }
    return url;
}

没有块级作用域(for,if,switch)

1.声明变量

使用var声明会被自动添加到最接近的环境中,没有var声明

会被添加到全局变量中。

function add(num1, num2){
    var sum = num1 + num2;
    return sum;
}

var result = add(10, 20);
l(sum);//undefined

function add(num1, num2){
    sum = num1 + num2;
    return sum;
}

var result = add(10, 20);
l(sum);//30

2.查询标识符

首先在本函数作用域查找,有这个变量就输出,不然一直往上级查找。

var color = "blue";
function getColor(){
    return color;
}
l(getColor());//blue

var color = "blue";
function getColor(){
    var color = "red";
    return color;
}
l(getColor());//red

变量提升
var color = "blue";
function getColor(){

    return color;
    var color = "red";

    // var color;
    //return color;
    //color = "red"
}
l(getColor());//undefined

垃圾收集(javascript垃圾自动收集机制)

1.标记清除

2.引用计数

3.性能问题

管理内存(内存大小有限制)

时间: 2024-08-30 15:54:28

4.2 执行环境和作用域的相关文章

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

相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行环境分为全局执行环境和局部执行环境,其中局部执行环境我们又可以称之为函数执行环境.那么究竟什么使执行环境呢?通俗的说,执行环境即为代码执行时所处的环境.我们下来看一看如下代码,再进一步分析之. 1 2 3 4 5 6 7 8 9 10 11 <script><br>var name="zhuzhenwei"; functio

深入理解javascript作用域系列第五篇——一张图理解执行环境和作用域

× 目录 [1]图示 [2]概念 [3]说明[4]总结 前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关于作用域的两种不同翻译而已.但实际上,它们并不相同,却相互纠缠在一起.本文先用一张图开宗明义,然后进行术语的简单解释,最后根据图示内容进行详细说明 图示 查看大图 概念 [作用域] 作用域是一套规则,用于确定在何处以及如何查找标识符.关于LHS查询和RHS查询详见作用域系列第一篇内部原理. 作用域分

4.1-4.2 基本类型及引用类型,执行环境及作用域

一.理解基本类型和引用类型的值 ECMAScript变量包含两种不同数据类型的值:基本类型值 和 引用类型值. 基本类型值指的是简单的数据段,而引用类型的值指那些可能由多个值构成的对象 引用类型的值是保存在内存中的对象,javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间.在操作对象时,实际上是在操作对象的引用而不是实际的对象.引用类型的值是按引用访问的,基本类型是按值访问的,因为可以操作保存在变量中的实际的值. 动态的属性 定义基本类型值和引用类型值的方式是类似的:

执行环境与作用域

在JavaScript中,执行环境定义了变量和函数有权范文的其他数据,决定了它们各自的行为:作用域就是变量和函数可以被访问的范围,分为全局作用域和局部作用域:如: <script> var a = 1; window.onload = function(){ var b = 2; function sum(){ var c = 3; return a+b+c; } sum(); }; </script> 以上代码,全局作用域定义了变量a并为window绑定了一个load事件的处理函

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

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

Javascript高级程序设计——执行环境与作用域

Javascript中执行环境是定义了变量或函数有权访问的其他数据,决定了各自的行为,每个执行的环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中. 全局执行环境是最外围的一个执行环境.全局执行环境被认为是window对象,所有全局变量和函数都作为window对象的属性和方法创建的.某个执行环境中的所有代码执行完后,该环境被销毁,保存在其中的所有变量和函数定义也随之销. 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,而在函数执行完

浅谈JS执行环境及作用域

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

《JavaScript高级程序设计》读书笔记 ---执行环境及作用域

执行环境及作用域 执行环境(execution context,为简单起见,有时也称为“环境”)是JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它.全局执行环境是最外围的一个执行环境.根据ECMAScript 实现所在的宿主环境不同,表示执行环境的

执行环境,作用域,作用域链详解

声明:该文章有些概念摘自<JavaScript高级程序设计> 1.执行环境:也称"环境",执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为.(全局定义的变量,函数里面可以访问.一般情况下,函数里面定义的变量,全局无法访问). 2.全局执行环境:全局执行环境是最外围的一直执行环境,(在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和和方法创建的),全局环境直到应用程序退出(关闭网页或者刷新网页)才会被

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