js 第四章总结 (变量、作用域和内存问题)

一、基本类型和引用类型的值

1.变量的数据类型的值:
(1)基本类型值:Undefined、Null、Boolean、Number、String;
不可添加属性
(2)引用类型值:可以添加属性和方法
如:

var person = new Object();
//添加一个名为name的属性
person.name = "linlin";
alert(person.name);			//linlin

引用类型值的副本是一个指针,如果用一个引用类型的值初始化另一个变量,这两个变量指向同一个对象。

		var person1 = new Object();
		var person2=person1;
		person1.name = "linlin";
		alert(person2.name);

2.传递参数
ECMAScript的所有参数都是按值传递的。
基本类型值的传递和基本类型变量的复制一样。
引用类型值的传递和引用类型变量的复制一样。
如:

		//基本类型值的传递
		function addTen(num){
			num+=10;
			return num;
		}
		var count = 20;
		var result=addTen(count);
		alert(count);		//20,count不会发生改变
		alert(result);		//30
		//引用类型值的传递
		function setName(num){
			num.name="xiaowang";
			num.age = 18;
			
		//虽然函数内部修改了参数的值,但原来的引用不会改变
		重写的num引用的是一个局部变量,而这个局部变量会在
		函数执行完毕后立即被销毁。	
			num = new Object();
			num.age = 24;
		}
		
		var person = new Object();
		person.name="lili";
		setName(person);
		alert(person.name);		//xiaowang
		alert(person.age);		//18
		
		//虽然只是函数中的name属性改变了,但是函数外的person
		也发生了改变,说明这两个变量指向了同一个对象

3.检测类型
(1)typeof:可以检测 String、Number、Boolean、Undefined、null和object都返回object
格式:alert( typeof 变量名 );
(2)instanceof:可以检测出是什么类型的对象
格式:alert( 变量名 instanceof 引用类型 );
(其中引用类型有:Object、Array、Date、RegExp、Function、基本包装类型:Boolean、Number、String,单体内置对象:Global对象、Math对象)

二、执行环境及作用域

1.执行环境:定义了变量或函数有权访问的其他数据,决定了它们的各自行为。每个执行环境都有与之相关的变量对象(环境中定义的变量或函数都保存在这个变量对象中)。
2.作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。

  • 内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。
    3.延长作用域链
    (1)with语句:将指定的对象添加到作用域链中。
    (2)try-catch语句和catch块
    4.没有块级作用域
    由于没有块级作用域,所以在if、for等语句中定义的变量在这些语句执行完毕后不会进行销毁,但在c、c++、java中执行完语句就会立刻销毁。
    js中的作用域
    (1)全局作用域:函数之外声明的变量,会成为全局变量。
    (2)局部作用域:
    在 JavaScript 函数中声明的变量,会成为函数的局部变量。只能在函数内部访问它们。
三、垃圾收集

1.js有自动收集垃圾机制。垃圾收集器是周期性运行的。
2.垃圾收集的方法:
(1)标记清除:离开作用域的值会被标记为可以回收,从而在垃圾收集期间被删除。
(2)引用计数:垃圾收集器在第二次运行时,会释放第一次引用中引用次数为0的值所占用的内存。
3.管理内存:当不再使用某些数据时,可采用(变量名=null ;)的方式解除引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值