• javascript 变量


      变量是一个和数值相关的名字。我们说变量“存储”了或“包含”了那个值。

      变量的类型

      javascript和java和C这样的语言之间存在一个重要的差别,那就是javascript是非类型的。这意味着javascript的变量可以存放任何类型的值。i=10;i="ten";是合法的。

      变量的声明

      在javascript程序中,在使用一个变量之前,必须声明它。

      var i;

      var sum;

      也可以使用一个var声明多个变量:

      var i,sum;

      而且还可以将变量声明和变量初始化绑定一起:

      var i=0,j=0,k=0;

      var message ="hello";

      如果没有用var语句给一个变量指定初始值,那么虽然这个变量被声明了,但是在给它存入一个值之前,它的初始值就是undefined。

      重复的声明和遗漏的声明

      使用var语句多次声明同一个变量不仅是合法,而且也不会造成任何错误。如果重复的声明有一个初始值,那么它担当的不过是一个赋值语句的角色。

      如果尝试读一个没被声明的值,javascript会生成一个错误。如果尝试给一个未用var声明的变量赋值,javascript会隐试声明该变量。但是要注意,隐式声明的变量总是被创建为全局变量,即使该变量只在一个函数体内使用。

      变量的作用域

      一个变量的作用域是程序中定义这个变量的区域。全局变量的作用域是全局性的,即javascript代码中,它处处都有意义。而在函数之内声明的变量,就只在函数体内部有意义。它们是局部变量,作用域是局部性的。函数参数也是局部变量,它们只在函数体内有意义。函数体内,局部变量的优先级比同名的全局变量高。

            var scope = "123";
            function checkscope() {
                var scope = "456";
                document.write(scope);
            }
            //输出456

      虽然全局作用域中编写代码时可以不用var语句,但是在声明局部变量时,一定要使用var语句。

      没有块级的作用域

      javascript没块级作用域,函数中声明的所有变量,无论在哪里声明的,在整个函数中它们都是有意义的。

            function test() {
                var i = 0;
                if (true) {
                    var j = 0;
                    for (var k = 0; k < 10; k++) {
                        document.write(k);
                    }
                    document.write(k);
                }
                document.write(j);
            }
            //输出0123456789100
            var scope ="123"
            function test() {
                alert(scope); //输出的是undefined
                var scope = "456";
                alert(scope); //输出的456
            }

      为什么第一次用会出现undefined(alert的scope是局部类型的,虽然还没声明!)。因为声明局部变量的var语句还没有执行。

      未定义的变量和未赋值的变量

      一个变量从没被声明过的,尝试读取这种未声明的变量会引起运行时的错误。(未被声明的的变量)。一个变量被声明了,但没有被赋值的变量,尝试读取这种未赋值的变量,将会得到一个默认值,即undefined.

      基本类型和引用类型

      数值、布尔值、null、undefined属于基本类型。对象、数组和函数属于引用类型。基本类型在内存中有固定的大小。但引用类型则不同。如对象可以具有任意的长度,它并没有固定的大小。数组和函数也是这样。由于这些

    类型没有固定大小,所以不能把它们的值直接存放在相关八字节的内存中,但可以存储相关的指针或内存地址,告诉变量在哪里可以找到这个值。

            function f() {
                var a = [1, 2, 3];
                var b = a;
                a[0] = 58;
                alert(b);//输出为58,2,3而不是1,2,3因为b是引用类型,a和b都指向同一个地方
            }

    string类型是一个特例。因为它具有可变的大小,所以不能存储在固定大小的变量中。但string类型做赋值时的效果却和基本类型一样!

      垃圾收集

      javascript和C 、C++不同。javascript的解析器可以检测到何时程序不再使用一个对象了。当它确定了一个对象时无用时,它就会把这个对象的内存释放掉。垃圾收集时自动执行的,对程序员时不可见的。

      作为属性的变量

      javascript的变量和对象的属性有很多的相似点。例如,变量i和对象o的属性i,是没有根本的区别的。

      全局对象

      当javascript的解析器开始运行时,它首先要做的事情之一就是执行任何的javascript代码之前,创建一个全局对象(global object)。这个对象的属性就是javascript程序的全局变量。当声明一个javascript

    的全局变量时,实际上座的是定义了那个全局变量的一个属性。此外,javascript的解析器还会用预定义的值和函数来初始化全局对象的许多属性。例如属性Infinity、parseInt和Math。在程序的顶层代码中(例如,不属于函数

    javascript代码),可以使用javascript的关键字this来引用这个全局对象。在客户端javascript中,window对象代表浏览器窗口,它包含在该窗口中的所有javascript代码的全局对象。这个全局window对象具有自我引用的

    window属性。

      局部变量:调用对象

      如果全局变量是特殊的全局对象的属性,那么局部变量又是什么呢?它们也是一个对象的属性,这个对象被称为调用对象。虽然调用的声明周期比全局对象的短,但是它们的用途是相同的。在执行一个函数时,函数和局部变量是作为对用属性而存储的。用一个完全独立的对象来存储局部变量使javascript可以防止局部变量覆盖同名的全局变量。

      

  • 相关阅读:
    Windows内存管理系列
    Windows C/C++ 内存泄露检测
    TCP/IP协议学习(六) 链路层详解
    TCP/IP协议学习(五) 基于C# Socket的C/S模型
    TCP/IP协议学习(四) 协议概述
    STM32学习笔记(十) CAN通讯测试(环回模式)
    STM32学习笔记(九) 外部中断,待机模式和事件唤醒
    STM32学习笔记(八) SPI总线(操作外部flash)
    TCP/IP协议学习(三) STM32中ETH驱动配置注意事项
    TCP/IP协议学习(二) LWIP用户自定义配置文件解析
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/2824299.html
Copyright © 2020-2023  润新知