javascript 1: 变量 内存 作用域简单描述

来源:互联网 发布:excel数据有效性菜单 编辑:程序博客网 时间:2024/05/16 18:23
js基本知识:
  1:变量基本简介:
var 松散类型,可能包含两种不同数据类型的值:基本类型和引用类型。基本类型是指简单的数据段,基本数据类型有(undefined.Null,Boolean,Number,String)。其中String在java中是属于应用类型,这里有点区别。这5种基本数据类型是按值访问的,因此可以直接操作保存在变量中的实际值。引用类型是指:那些可能由多个值构成的对象,它的值在内存中,js不能直接访问内存中的位置,因此不能直接操作内存空间。它是按引用访问的。

基本类型: var a = 7;  alert(a); // 7   基本类型非常简单,非常的直接。
引用类型的特性:1: 动态的属性;  var person = new Object();       person.name = "lhx";  alert(person .name); // lhx  可以动态的添加属性
2: 复制变量值;  var p1 = new Object();  var p2 = p1; p1.name="lhx";   alert(p2.name);//lhx   他们两个指向了同一个对象
3: 传递参数;       在调用函数传递参数的时候,和变量赋值一个道理。

2:执行环境和作用域:
 执行环境是js中最为重要的一个概念,执行环境定义了变量函数有权访问的其他数据,决定了他们各自的行为。每个环境都会有一个与之关联的变对象,环境中定义的变量和函数都保存在这个对象中,在解析器解析的时候会使用它。
环境分为:全局和局部。全局执行环境是最外围的一个执行环境,全局环境直到应用程序退出时才会被销毁。与全局相比较的是函数的环境,每个函数都有自己的环境,当执行流进入到该函数后,函数环境会被推入到一个环境栈中,而在函数执行之后,栈会将其弹出,将控制权返回给之前执行的环境。
代码在解析的时候会创建一个作用域链,它保证对执行环境有权访问的所有的变量函数的有序访问。作用域的最前端是当前环境的变量对象,然后是包含的下一个环境(父环境),最后是全局执行环境。这也是为什么我们在js中可以访问全局变量的原因。在寻找解析的时候他从最前端顺着作用域链一级一级的搜索下去。如果没有找到就会导致错误。作用域的理解对js效率也有很大的关系。在定义的时候,确保程序可以最高效的找到标识。当没有用var 修饰的时候,则表示全局。在闭包中也涉及到作用域。

var color = "blue"; -----定义了一个全局变量
function changColor(){
if("blue" == color){
color = "red"; -----------在函数里面是可以访问的,在这个作用域链中可以找到它
}else{
color = "blue";
}
}

每个环境的作用链只可以往上搜索,但不能往上搜索。这就是在方法里面可以访问全局的变量,而在外面却不能访问里面的局部变量(闭包方法除外)。js中可以延长作用域。with 和 try catch 但是我基本没用到。不做记录


3:垃圾回收机制:好几种 标识清除法,引用计数......

 

0 0