zoukankan      html  css  js  c++  java
  • 变量与内存

    基本类型和引用类型的值

    ECMAScript变量可能包含两种不同的数据类型的值:基本类型值和引用类型值。基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。而引用类型值则是指那些保存在堆内存中的对象,意思是变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,该位置保存对象。

    将一个值赋给变量时,解析器必须确定这个值是基本类型值,还是引用类型值。基本类型值有以下几种:UndefinedNullBooleanNumberString。这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。

    PS:在某些语言中,字符串以对象的形式来表示,因此被认为是引用类型。ECMAScript放弃这一传统。

    如果赋值的是引用类型的值,则必须在堆内存中为这个值分配空间。由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。这样,当查询引用类型的变量时,先从栈中读取内存地址,然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问。

    //基本类型和引用类型的变量赋值,总之复制的是栈内存里的值
    var box="haha";
    var box2=box;
    box="hehe";
    alert(box); //haha
    alert(box2); //hehe
    
    
    var box={
        name:"haha"
    }
    var box2 = box;
    box.name="hehe";
    alert(box.name); //hehe
    alert(box2.name); //hehe

    传参

    //传参,所有函数的参数都是按值传递的,没有按引用传递
    function box(num){
        num +=10;
        return num;
    }
    
    var num = 50;
    alert(box(num));//60
    alert(num);     //50
    //这里传递一个引用类型的参数,但不是按引用传递,z两者不一样
    function box(obj){
        obj.name="haha";
    }
    var obj = new Object();
    box(obj);
    alert(typeof obj.name); //haha
    //数据类型检测
    //typeof
    //instanceof
    
    var box = [1,2,3];
    alert(box instanceof Array);                    //是否是数组
    var box2 = {};
    alert(box2 instanceof Object);                    //是否是对象
    var box3 = /g/;
    alert(box3 instanceof RegExp);                //是否是正则表达式
    var box4 = new String('Lee');
    alert(box4 instanceof String);                    //是否是字符串对象

    另外注意一下几点:

    //没有块级作用域
    if(true){
        var box = "dang";
    }
    alert(window.box);
    //在函数里,加var就是局部,不加就是全局,建议初始化时一定加var
    
    //向上搜索作用域链
    var box = "red";
    function get(){
        return box;  //代表全局box,如果作用域里没有就会向上搜索
    }
    alert(get());
  • 相关阅读:
    [zt]【外刊IT评论网】我是如何教我5岁的女儿学编程的
    Three Lines (USACO 2012 US Open, Bronze Division Problem 2)
    my domain
    JQueryDialog(弹出窗口,遮蔽窗口)
    煲耳机
    去掉桌面图标阴影
    RSS有什么用?RSS是什么?
    采用交换机和HUB连接局域网有什么区别?
    电脑经常自动重启的原因
    使用hub(集线器)连接局域网实现文件共享
  • 原文地址:https://www.cnblogs.com/by-dxm/p/6127670.html
Copyright © 2011-2022 走看看