了解JS中的变量 | 8月更文挑战

151 阅读2分钟

这是我参与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.标记清除