轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )

变量:  存储数据的容器
   
1.声明        var
 
2.作用域       全局变量、 局部变量、 闭包(相对的全局变量);
 
3.类型         a.基本类型(undefined, null, boolean, number, string)   b.引用类型;(object, function),其实function 也是对象-->var a = new Function(alert('我也是对象'));
 
4. 类型转换    隐式转换(==, -, *, /, alert)、   显式转换(parseInt, parseFloat, Number, String, Boolean)。
 
5.命名规范     可由 数字、 字母、 下划线组成, 不能以数字开头, 不能使用关键字和保留字;匈牙利命名法。
 
上面的补充:
命名规范
    养成良好的变量使用习惯
        1.一个变量只存一种类型的数据,
        2.尽量减少对隐式转换的依赖,这样可增强程序的可读性,日后修改程序时不至于混乱,
        3.使用匈牙利命名法,
        4.使用局部变量时记得加  var 进行声明,不然会与全局变量冲突,   
 
作用域
    闭包: 子函数可以使用 父函数、祖先函数 的局部变量,(其实就是变种的 全局变量,这个变量在子函数眼中就是全局变量)
 
 
    javascript 预解析机制:   
   已补充,请看这:轻松搞定javascript预解析机制
 
 
类型
    内存分布(这里所说的内存是 RAM,电脑所有程序都在这运行,详情请问度娘),
    首先,将内存分为两个区域,   a.栈区   b.堆区
    JS把 基本类型 存在栈区,  把引用类型放在堆区
    为什么呢,他们有什么特点吗?
 
基本类型 -----> 固定空间 ------体积小 ------> 所以是值传递(就是复制一份传递)  ------> 存放在 栈 中 --------> 查找速度快(放在固定文件夹,当然快啦)----- 自由度小(只能点菜)
 
引用类型 -----> 无固定空间 ------体积通常比较大------> 复制很耗性能,所以是引用传递(房子只有一间,就是配多一条钥匙)  ------> 存放在 堆 中 ( 一个文件夹放N种格式文件 )--------> 查找速度相对慢 ----自由度大(DIY菜式)
 
    下面举两个例子
    1. 房子:引用值; 钥匙:引用地址;  通过钥匙可以找到房子,也可以修改里面的东西;
    你朋友来了你所在的城市,晚上没地方睡,就去酒店,你有几套房子,你说“兄弟,来到我的地盘,怎么能让你去住酒店呢,我那边还有几套房子,你来住”,这时,你是把房子背起来,直接送他那呢,还是配一条钥匙给他呢?
    很明显,必须是配一条钥匙!
    这和引用类型是类似的, 引用类型(房子)通常是很大的,直接拷贝一份是很消耗性能的,所以直接用引用地址(钥匙)会方便很多;
    再引申到另一个问题,如果你又把 这个 引用值 赋值给别一个变量, 其实就是相当把你朋友给你的钥匙,你又复制了一条,给了别人,那么那个人在房子里移动一下沙发什么的,改变的还是那个房子(引用值)里的东西,所以你过去时那沙发位置也就变了;
    
    2.文件夹:引用值; 文件夹快捷方式:引用地址; 通过快捷方式可以找到文件夹,也可以修改里面的东西;
    
 补充中....
 
原文地址:https://www.cnblogs.com/Ivangel/p/3682868.html