• 变量的六个属性


    变量 是机器存储单元在语言中的抽象。它是编程语言最重要的概念之一。

    变量有6个属性(或者说从6个方面去描述变量)

    1. 名字/别名
    2. 地址/左值
    3. 值/右值
    4. 类型
    5. 作用域
    6. 生存期/生命期

    1 名字/别名

    名字的概念在 名字/标识符 已经提到。
    当多个名字访问的都是同一个存储地址时(或者说多个名字都 绑定/约束 于同一个存储地址),可称这些名字为 别名。
    使用别名有损于程序的可读性,然而却很难从一门语言中完全消除。如下

    Java

    public static void main(String[] args) {	
    	String name = "jack";
    	String alias = name;	
    	name = "lily";
    	
    	System.out.println(name);
    	System.out.println(alias);
    }

    Javascript

    var name = 'jack';
    var alias = name;
    name = 'lily';
    alert(name);
    alert(alias);
    

    可以看到变量alias作为name的别名,都指向同一个地址,值为“jack”。但当name发生变化后,alias却全然不知。
    许多语言中,子程序的参数也可产生别名现象。

    2 地址/左值

    计算机中所有的数据都是存放在存储器中的,一般把存储器中的一个字节称为一个存储单元。为了正确的访问这些
    存储单元,需要为每个存储单元编个号。根据编号即可准确的找到该内存单元。内存单元的编号就称为 地址 。

    在许多语言中,程序中同一个 名字/标识符 可以在不同的时间,与不同的 地址 关联/绑定
    变量的地址有时也称为变量的左值(left value),或许是因为各种语言中变量经常位于赋值语句的左边。

    String name = 'jack'; // Java
    var name = 'jack'; // JavaScript

    又或许在地址图上编号总是位于左边,值总是在右边

    名字 与 地址 的 关联/绑定 后续会提到。

    3 值/右值

    变量的值是指与这个变量相关联的存储单元的内容。可以将计算机的存储单元想象成抽象的单元,而非物理单元。
    现代计算机多数以字节为单位,一个字节有八位长度。
    变量的值有时也称为变量的右值(right value),因为变量常被用于赋值语句的右边(参考左值)。


    4 类型

    类型 决定了变量可以存储的值的范围,且定义了该类型的操作集合。
    如Java中int类型占4个字节,取值范围是-2147483648~2147483647,对其可进行加减乘除及取模运算。


    5 作用域

    作用域是指变量的可见性问题。即决定了那些子过程和函数过程可访问该变量。
    各种语言的划分也不同,如有的变量作用域分为:局部、窗体、块和全局。有的则只有局部、全局之分。
    如C、C++、Java中有块级作用域,JavaScript中则没有 。


    6 生存期/生命期

    生存期/生命期 指的是何时创建,何时释放。生存期/生命期 与 存储绑定 密切相关。

    如在Java中的一个方法中声明的一个变量,该变量在方法执行时创建,执行后释放。

    public static void main(String[] args) { 
        String name = "jack";   
        System.out.println(name);
    }
    

    又如JavaScript中

    function func(){
        var name = 'jack';
        alert(name);
    }
    func();
    

    func执行后变量name就释放了。

    但 闭包 的情况可延长局部变量的生命期。

    var getName;
    function func(){
        var name = 'jack';
        getName = function(){
            return name;
        }
    }
    func();
    


    func执行后,变量name不会释放,却会等到getName生命结束。

  • 相关阅读:
    LitJson.JsonException: Can't assign value '2347089724' (type System.UInt32) to type System.Int64
    unity特效ParticleSystem在UI上缩放(自适应屏幕)
    unity特效ParticleSystem用到UI上
    数据结构-线性表
    数据结构-各种树的简单理解
    图解排序算法之堆排序
    图解排序算法之快速排序—三数取中法
    图解排序算法之归并排序
    排序算法
    CSS 选择器及优先级
  • 原文地址:https://www.cnblogs.com/snandy/p/1967962.html
Copyright © 2020-2023  润新知