这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
概念
变量是用于存储信息的"容器"。
可用var来声明一个变量:var 变量名
变量可以先声明后赋值,可以又声明又赋值一个变量
可以在一条语句中声明很多变量,语句以 var 开头,变量之前用逗号分隔;
未使用值来声明的变量,该变量的值是 undefined;
如果单单重新声明 JavaScript 变量,该变量的值不会丢失;
变量的命名规范
1.变量名必须以英文字母、_ 和开头)
2.变量名可以包括英文字母、_ 、$和数字;
3.不可以使用系统的关键字、保留字作为变量名;
4.变量名称对大小写敏感(JavaScript 语句和 JavaScript 变量都对大小写敏感)
JavaScript 变量的数据类型
1.不可改变的原始值(栈数据)
number、string、boolean、undefined、null
特点:
(1).占用空间固定,保存在栈中;
(2).保存和复制的是值本身;
(3).可使用typeof检测这些基本数据类型;
2.引用值(堆数据)
array、object、function
特点:
(1).占用空间不固定,数据保存在堆中;
(2).保存和复制的是指向对象的一个引用;
(3).可使用instanseof检测这些数据的类型;
变量作用域
根据变量的作用域不同,大致可分为:
1.全局变量:
包括:
(1).在函数体外定义的变量
(2).在函数体内部或外部定义的 无var声明的就直接赋值的变量(也称为暗示全局变量)
特点:可以在任意位置调用
2.局部变量:
包括:
(1)在函数体内部使用var声明的变量;
(2)函数的参数变量(形参);
另外,由于变量可以重复声明,所以同名变量存在优先级,规则:
(1)局部变量高于同名全局变量
(2)参数变量高于同名全局变量
(3)局部变量高于同名参数变量
(4)在同一个作用域,若存在同名变量,后面的会覆盖前面的。
变量特点
1.忽略块级作用域
2.全局变量是全局对象的属性,局部变量是调用对象的属性;
3.内层函数可以访问外层函数的局部变量,外层函数不能访问内层函数的局部变量。全局变量可以给任何全局内的函数调用。
4.生命周期:
(1)全局变量:除非被显示删除,否则一直存在
(2)局部变量:从声明开始至函数执行完毕 或者被显示删除
(3)回收机制:
a.标记清除
b.引用计数
a.标记清除