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.性能问题

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

转载于:https://www.cnblogs.com/caijw/p/8066817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值