第四章 变量 作用域和内存问题(部分)

来源:互联网 发布:帝国cms怎么建站 编辑:程序博客网 时间:2024/05/16 12:17


JavaScript变量的值及其数据类型 可以在脚本的生命周期内改变。

EC,AS次日普通变量可能包含两种不同数据类型的值:基本类型和引用类型值。

基本类型:简单的数据段。   引用类型:可能有多个值构成的对象。

5中基本数据类型:Undefined、Null、Boolean、Number、String。

引用类型的值是保存在内存中的对象。JavaScript不允许直接访问内存中的位置,不能直接操作对象的内存空间。在操作对象时,实际上操作的是对象的引用而不是实际对象。

引用类型的值是按引用访问的。

当从一个变量向另一个变量赋值引用类型的值时,变量对象中存储的值也会被复制。这个值得副本是一个指针,指针指向存储在堆中的一个对象。复制结束后,两个变量引用的是同一个对象。也就是说,改变堆中的对象值,两个变量中对象值均会改变;改变一个变量的值,另一个变量的值也会改变。

var obj1 = new Object( );

var obj2 = obj1;

obj1.name = “Book”;

alert(obj2.name);//输出结果为Book。

 

传递参数:

ECMScript中所有函数的参数按值传递。(把函数外部的值赋值给函数内部的参数,如同把值从一个变量复制到另一个变量)。

向参数传递基本类型时,被传递的值会被复制给一个局部变量;向参数传递引用类型的值时,值得内存地址会被复制给一个局部变量。局部变量的变化会引起引用类型值得变化,不会引起基本类型值得变化。

       1.

Function addTen(num){

       num +=10;

return num;

}

var count = 20;

var result  =addTen(count);

alert(count);//20

alert(result);//30

 

2.

function setName(obj){

       obj,name = “Boook”;

}

var person = new Object();

setName(person);

alert(person.name);//Book

 

3.

function setName(obj){

       obj.Name = “Book”;

       obj = new Object();

       obj.Name= “HAHA”;

}

var person= new Object();

serName(person);

alert(person.Name);//Book

 

检测类型:

Typeof操作符:确定一个变量是何种数值。

var a = “Nick”;

var b = true;

var c = 22;

var u;

var n = null;

var o = object;

alert(typeof a);//String

alert(typeof b);//boolean

alert(typeof c); //number

alert(typeof u);//undefined

alert(typeof n);//object 若变量值是一个对象或null,typeof对象返回object

alert(typeof o);//object

 

作用域链

延长作用域链:

       在作用域链前端临时增加一个变量对象,该变量对象会在代码执行后被移除。

       try-catch语句的catch块

       with语句

阅读全文
0 0
原创粉丝点击