一、命名
(一)、方法
1、匈牙利命名法:变量名=类型+对象描述
Int 整型:i,Float 浮点:fl,Boolean 布尔:b,String 字符串:s,Array 数组:a,Object 对象:o,Function 函数 :fn,Regular Expression 正则:re
2、驼峰命名法://大小写混合转全部大写的方法
(1)、全部小写:单词与单词间使用下划线分割 //first_name
(2)、大小写混合
2.1.1、大驼峰:每个单词首字母大写 //FirstName
2.1.2、小驼峰:第一个单词小写,其余的大写 //firstName
(二)、规则
1、音节符:英文字母或下划线
2、组成:英文字母、数组、下划线
3、禁忌:JavaScript关键字、保留字 //相关链接
二、声明
(一)、显示声明
var 变量名,es6:let 变量名,const 变量名
(二)、陋习
1、没有类型 //例如数组、对象等
2、重复声明
3、隐式声明
4、不声明直接赋值
(三)、正确操作
1、先声明,后读写;先赋值,后运算
三、变量类型
(一)、值类型
1、占用空间固定,保存于栈中
2、保存与复制的是值本身
3、使用typeof检测数据类型
4、基本数据类型是值类型
(二)、引用类型
1、占用空间不固定,保存于堆中
2、保存与复制的是指向对象的一个指针
3、使用instanceof检测数据类型
4、使用new()方法构造出的对象是引用型
四、作用域
(一)、全局变量:在任何位置调用
1、在函数体外最外层定义的变量
2、在函数内部定义的无var、let、const声明的变量
(二)、局部变量:当前函数内部使用
1、在函数体内用var、let、const声明的变量
2、函数的参数变量
(三)、优先级:局部变量 > 参数变量 > 全局变量
1、局部变量高于同名全局变量
2、参数变量高于同名全局变量
3、局部变量高于同名参数变量
(四)、特性
1、var无块级作用域,es6新增let块级作用域定义变量
2、全局变量是全局对象的属性,局部变量是调用对象的属性
3、作用域链 //相关说明
(1)、内层函数可以访问外层函数的局部变量
(2)、外层函数不能访问内层函数的局部变量
4、声明周期
(1)、全局变量:除非被显示删除,否则一直存在 //var声明的全局变量无法使用delete删除
(2)、局部变量:自声明起到函数运行结束或被显示删除
(3)、回收机制:标记清楚、引用计数 //相关说明