- JavaScript是非类型语言,及变量可以存储任何类型的值。
- JavaScript(以前)的程序多是短小的脚本,所以并不需要那么精确,而且我们从简单的语法中也获益匪浅。
- 变量在使用之前必须先声明(可以不赋值)。
- var声明的变量是永久性的,也就是说用delete运算符来删除这些变量会引发错误。
- 隐式声明的变量总是被创建为全局变量,即使是在函数中创建的。
- 隐式创建的变量可以使用delete运算符删除。
- 没有块级作用域
var scope = "global"
function f(){
alert(scope)
var scope = "local"
alert(scope)
}
f() // undefined local
等价于
var scope = "global"
function f(){
var scope
alert(scope)
scope = "local"
alert(scope)
}
f() // undefined local
- 未声明变量和未赋值变量,前者直接使用会报错,后者不会。
- 基本类型:数值、布尔值、null、undefined,引用类型:对象、数组、函数。
- 基本类型在内存中有固定大小,数值占8个字节,布尔值占1个字节,数值类型是基本类型中最大的数据类型。
- 引用类型没有固定大小,但是包含值的指针和内存地址。
- 变量保存了基本类型的实际值,但是对引用类型的值却只保存对它的引用。
var a = 3.14
var b = a
a = 4
alert(b)
var a = [1,2,3]
var b = a
a[0] = 99
alert(b)
- 自动垃圾回收机制(系统检测到没有变量引用“hello”,就会释放该字符串占用的内存空间)
var a = "hello"
var b = a.toUpperCase()
a = b
- 每个执行环境都有一个和它关联在一起的作用域链(对象列表和对象链)。
- 查找变量(变量名解析)时,从第一个对象开始直到找到或者顶层对象。