码迷,mamicode.com
首页 > 其他好文 > 详细

4.2 执行环境和作用域

时间:2017-12-19 19:34:30      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:markdown   with   外部   deb   res   机制   change   输出   fun   

执行环境和作用域

每个函数都有自己的执行环境
作用域链(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 执行环境和作用域

标签:markdown   with   外部   deb   res   机制   change   输出   fun   

原文地址:http://www.cnblogs.com/caijw/p/8066817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!