JavaScript 变量作用域 & 内存

来源:互联网 发布:kvm ubuntu 编辑:程序博客网 时间:2024/06/05 03:23

1.变量类型

    基本类型 : 保存在栈内存中 , 这个值完全保存在内存中的一个区域.

    引用类型 : 保存在堆内存中 , 变量中保存的实际上是一个指针, 这个指针指向内存中的另一个位置, 该位置保存对象 . ( 先读栈内指针, 再根据这个指针指向堆内存相应区域 )

    变量赋值 : 如果是基本类型, 则相当于在栈内存中又开辟了一块内存空间来存储, 例如 var num2 = num1 , 虽然 num2 与 num1的值是完全相等的, 但是, 在内存中是独立的.

    引用赋值 : 间接 , 只是在栈内存中分配一个区域来保存新的指针, 而这个新的指针与原指针指向同一个堆区域 .

 2. 参数传递

    按值传递, 就类似赋值, 会在栈内存中开辟空间, 来保存形式参数的内容 .

3. 检测类型

    检测基本类型 : typeof 是最好的工具 var s = "string"     alert( typeof s )     // 显示结果为string

    检测引用类型 : instanceof 如果变量是引用类型的实例, 就会返回 ture , 例如 alert ( person instanceof Object ) ;

注: 执行环境

  执行环境是 JavaScript中最为重要的一个概念, 在 Web 浏览器中, 全局执行环境被认为是 window 对象, 因此所有全局变量和函数都是作为window对象的属性和方法创建的.某个执行环境中的所有代码执行完毕后, 该环境被销毁, 保存在其中的所有变量和函数定义也随之销毁.( 全局执行环境直到应用程序退出-例如关闭网页或浏览器 )

每个函数都有自己的执行环境, 当执行流进入一个函数时, 函数的环境就会被推入一个环境栈中, 而在函数执行之后, 栈将其环境弹出, 把控制权返回给之前的执行环境.

4.没有块级作用域

    在 C 语言中 for( var i = 10; i > 0; i-- ) {} 此处的 i 不可以在 for 循环以外的区块中使用 ,  但是 JavaScript中就可以在 for循环以外的区块中使用 .

    有函数块区域 , 但是没有作用域 ( if , for 等等 )

5.管理内存

    JavaScript有自动回收内存机制, 但是, 优化内存还是很有必要 , 最好的办法是 ,执行中的代码只保存必要的数据. 一旦数据不再有用, 最好通过将其值设置为null来释放其引用-这个做法叫做解除引用.这一做法适用于大多数全局变量和全局对象,局部变量没关系(会自动被解除) , 堆中的自动消除, 只要将连接该堆的指针设置成 null , 当系统检测到没有指针连接该堆时, 就会将该堆的内存释放.

6. For in

    在javascript 中有一种 for in 语句, 与C语言相区别, 作用一般是遍历数组或者是对象的属性.

    for ( 变量 in 对象 )

    {

        // 在此执行代码

    } "变量" 用来指定变量, 指的变量是数组元素或者对象属性.

    var mycars = new varry() ;

    var x;

    mycars[0] = "ben" ;

    mycars[1] = "bmw";

    for ( x in mycars)

    {

        document.write(mycars[x]+"<br />") ;     // 注意此处, HTML语句要写在 "" 内.

    }

7. Javascript 中的特殊字符

\'单引号\"双引号\&和号\\反斜杠\n换行符\r回车符\t制表符\b退格符\f换页符

这些都是在双引号之内 "" .

\ 不用放在引号内"" 表示换行, 例如 document.write(" Hello   \

                              World " ) ;
 

原创粉丝点击