4.2 执行环境和作用域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.性能问题

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

以上是关于4.2 执行环境和作用域的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 作用域 与 作用域链

4.2 js没有块级作用域

高程:执行环境作用域上下文执行过程垃圾收集try...catch...

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

JS 函数作用域及变量提升那些事!

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