Javascript高级程序设计——基本类型和引用类型的值

  ECMAScript中的变量有两种不同的数据类型的值:

基本类型:基本类型的值是简单的数据段。包括:Undefined、Null、Number、Boolean、String五种

引用类型:引用类型的值是保存在内存中的对象,引用类型对象保存的是指针。

当复制变量时,对于基本类型,会在变量对象上创建新值,然后把该值复制到新变量分配的位置上。

  对于引用类型,同样也会把储存在变量中的值复制一遍,只不过这个变量储存的是指针。指针指向储存在堆中的对象:

  

  传递参数:

    ECMAScript中所有函数的参数都是按照值传递的,即把函数的外部的值复制给一个局部变量arguments对象中的一个元素。传递引用时会把引用的内存地址复制给这个局部变量,所以局部变量的变化会反映在函数外部。

function setName(obj){
    obj.name = "yangxunwu";
}

var person = new Object();
setName(person);
alert(person.name)                //"yangxunwu"

这个示例中的引用类型传递给函数参数时,其对象的地址被复制给函数参数,所以setNme()内部对对象添加属性时,也会反映到外部person对象中。

function
setName(obj){ obj.name = "yangxunwu"; obj = new Object(); obj.name = "new name"; } var person = new Object(); setName(person); alert(person.name); //"yangxunwu" 对象传递给函数时只是把地址复制给内部变量arguments,所以第一个obj.name= "yangxunwu",修改了外部的对象的属性,当obj = new Object()时,局部变量 被重新赋值,这个值是局部对象的值,所以即使添加了属性,这个局部对象也会在 函数执行完自动销毁。如果是引用传递,那么这里的外部person对象的name属性 会被修改为”new name“,但javascript的函数参数是值传递,所以这里依旧输 出”yangxunwu“.

  

  检测类型

    对于基本数据类型用typeof操作符,typeof对于引用类型一律返回object

基本数据类型:
typeof
4 //Number typeof "4" //String typeof null //Object

    对于引用用类型,使用instanceof操作符类判断是什么类型的对象,所以引用类型都是Object实例,所以始终反悔true,基本数据类型不是对象,所以始终为false。

person instanceof Object;         //true
5 instanceof Object               //false

 

  执行环境和作用域

    1、执行环境定义了变量或函数有权访问的其他数据,每个执行环境都有与之相关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中。

    2、全局执行环境是最外围的一个执行环境,Web浏览器中全局执行环境是window对象,执行环境中的代码全部执行完后,环境被销毁,所以函数和变量也被销毁。

    3、代码执行时会创建一个作用域链,用途是保证对执行环境有权访问的所有变量和函数的有序访问,作用域前端是当前执行代码的环境的变量对象,下一个变量对象来自包含的外部环境,直到全局环境。

    4、标示符查询是沿着作用域链一级一级的搜索,搜索到之后就停止搜索,所以标示符相同的局部中的变量会屏蔽外部变量。

延长作用域链withtry-catch:

    对于with语句来说,会将指定的对象添加到作用域链中,对于catch,会创建新的变量对象,包含错误对象的声明。

function buildUrl(){
    var loc = "http://";

     with(location){
          var url = href + loc;
    }

     return url;          
}    
with将location对象所有属性和方法添加到了变量对象,然后变量对象被添加到作用域的前端,
with的内部定义了url变量,url也就成为了函数执行环境的一部分,所以可以作为函数被返回。

js没有块级作用域
for(var i = 0; i < 10; i++){
    ....
}

alert(i)           //10

posted @ 2015-08-31 11:42  xnuwu  阅读(226)  评论(0编辑  收藏  举报