JavaScript 变量作用域 & 内存

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 " ) ;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值