JavaScript中变量,作用域和内存问题

变量,作用域和内存问题

学习重点:
1.理解基本类型和引用类型的值
2.理解执行环境
3.理解垃圾回收
JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变。
1.基本类型和引用类型的值
基本类型值指的是 简单的数据段(5中基本数据类型:Undefined,Null,Boolean,Number,String.这5中基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值),保存在栈内存中。
引用类型是对象,保存在堆内存中。
ECMAScript中所有函数的参数都是按值传递的。
typeof():是用来检测基本数据类型的最佳工具,但是若检测的变量是一个对象或是null,则typeof()返回“object”。
instanceof(): 用法 variable instanceof constructor 举例alert(color instanceof Array); //true/false
2.执行环境及作用域
执行环境定义了变量或函数有权访问其他数据,决定了他们各自的行为。每个执行环境都有一个与之相关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。
全局执行环境是最外围的一个执行环境。在Web浏览器中,全局执行环境被认为是window对象。因此所有全局变量和函数都是作为window对象的属性和方法创建的。
某个执行环境 的所有代码执行完毕之后,该运行环境被销毁,保存在其中的变量与函数定义也随之销毁(全局执行环境直到应用程序退出才会销毁,如关闭网页或者关闭浏览器)
当代码在一个环境中执行的时候,会创建变量对象的一个作用域链(scope chain)
作用域链的用途:是保证对执行环境有权访问的所有变量和函数的有序访问。
3.垃圾收集
“标记清除”是目前主流的垃圾收集 算法。

猜你喜欢

转载自blog.csdn.net/wsymcxy/article/details/81268914
今日推荐