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