zoukankan      html  css  js  c++  java
  • 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.性能问题

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

  • 相关阅读:
    点击退出 防止回退
    AngularJS select中ngOptions用法详解
    git hub
    .ashx datatable转excel
    写日志 log 到文件夹
    easyui layout 布局title
    easyui tree 折叠节点
    转json using指令
    Qt QWindow转QWidget
    CEF 重写弹窗事件
  • 原文地址:https://www.cnblogs.com/caijw/p/8066817.html
Copyright © 2011-2022 走看看