现在的位置: 首页 > 综合 > 正文

JavaScript 变量

2018年02月04日 ⁄ 综合 ⁄ 共 1717字 ⁄ 字号 评论关闭
文章目录

变量是一个和数值相关的名字。简单的说变量里“包含”或“存储”一个值。

变量的类型

变量是没有数据类型的,你可以给一个变量先赋值数值,在赋值成字符串这个是合法的。

var i = 1;
i = 'asd';

变量的声明

 定义javascript变量名使用var关键字,

var a;

或者可以直接定义并初始化值

var a = 1;

如果定义了一个变量,没有初始化值,那在给这个变量赋值之前该变量的值是undefined。如果读一个没有声明的变量,这个是报错的,但是要是给这个变量名赋值那么这个变量名就合法了,它会变成一个全局变量。

变量的作用域

一个变量的作用域是程序中定义这个变量的区域。全局(global)变量的作用域的全局的,它在javascript代码中处处都可以定义。局部(local)变量,它只能在函数体内定义,包括函数的参数也是局部变量。

局部变量的优先级是高于全局变量的。

			var i = "global";
			function test(){
				var i = "local";
				document.write(i);//local
			}

javascript是没有块级别的作用域的,只要是在这个函数体内定义的变量,不管是在声明语句块里还是在语句块定义,该函数体内都是可以使用的。对于变量的定义尽量定义在函数的开头。

			i = "global";
			function test(){
				alert(i);//undefinded 由于局部变量定义和全局变量相同的变量名,所以全局变量被隐藏了,
				         //但是局部变量还没有初始化,所以是 undefinded
				var i = "local";
				if (1 > 0){
					var a = "1234";
				}
				alert(i);//local
				alert(a);//1234
			}
			test();

基本类型和引用类型

数值、布尔值、null、undefined属于基本类型,对象、数组、函数属于引用类型。基本类型在内存中具有固定大小的,而引用类型是没有固定大小的。

			var a = 3.14
			var b = a;
			a = 4;
			alert(b);//3.14
			
			var c = [1, 2, 3];
			var d = c;
			c[0] = 99;
			alert(d);//[99, 2, 3]
			
			var s = '123';
			var s1 = s;
			s = '456';
			alert(s1);//123

字符串是一个特殊的类型,它可以看做是基本类型,是因为他是通过复制来传递的。也可以看做是引用类型,因为它的大小也是可变的。

垃圾回收

javascript程序在创建字符串、数组、对象时,解释器必须动态分配内存来存储它们,这样很容易造成内存溢出。因此javascript产生了垃圾回收机制,它是自动检测引用对象是否还是被变量引用,如果检测出该对象没有被变量引用,将自动清除对象(也就是清除对象所占用的内存)

			var a = "123";
			var b = "456";
			a = b;
			document.write(a);//456

这时再也无法找到a原来的123,所以可以理解为被javascript回收了。

作为属性的变量

当javascript的解释器开始运行的时候,他首先创建一个全局对象,对象的属性就是全局变量。但是javascript允许有多个全局执行环境,也就是说每一个环境都有不同的全局的对象(在这种情况下,全局对象就不在是全局的了)。但是每一个全局的对象都会有javascript预设定的属性和对应的自己定义的属性。例如

<html>
	<head>
		<title></title>
	</head>
	<body>
		<iframe src="1_1.html"></iframe>
		
		<script>
			var a = 1;
		</script>
	</body>
</html>

1_1.htnl

<html>
	<head>
		<title></title>
	</head>
	<body>
		<input type="button" value="click" onclick="test();">
		<script>
			function test(){
				var i = parent.a;
				alert(i);//1
			}
		</script>
	</body>
</html>

父页面的script代码块和子页面1_1.hml是没有关系的,它们有各自的全局对象和属性,但是子页面可以使用parent.X到父页面的全局对象的属性。

抱歉!评论已关闭.