变量提升

/*变量提升
* 在JS代码执行之前,浏览器要先过一遍代码,把其中带var和带function 关键字内容提前声明
* 带var 是只声明(给个默认值undefined) 不定义
* 带function 声明加定义
*
* 因为 用function 关键字声明的函数 在变量提升阶段已经赋值完成,
* 所以我们可以在JS文件中的任意位置调用这个函数
*
* 变量提升只会提升等号左边的部分; 不会提升右边的部分
*
* var 一个变量,相当于给window添加一个属性
* 带var 会进行变量提升,不带var 的没有变量提升
*
* var a=12;
* let a=12 ; 不能重复声明
*
* const =66; 声明常量用的 既不能重复声明,也不能重复定义
* const 没有变量提升*/

/*变量提升 是不看条件成不成立的 这个是针对var 来说的
* 针对 function来说,在条件语句中的function声明;标准浏览器下只是声明,不定义的,
* 在IE低版本,是既声明 又定义的*/



/*变量提升的特殊情况
* 1.只提升 等号左边的内容
* 2.不管条件是否成立 都要进行变量提升;
* 对于function声明比较特殊,在标准浏览器下,只声明,不定义
* 在IE,低版本 是 既声明,又定义
* 3.所有的匿名函数 都是不会进行变量提升的
* 4.return 后边的内容 是不会进行变量提升的
* 但是return 下边的代码是可以进行变量提升的
*5.所有的自执行函数都不会进行变量提升*/

/*es6 的声明
* let const :没有变量提升;不会给window添加属性
* let a = 12; 不能重复声明 不管上面是怎么声明过的;但是能重复定义
* const b=12 ; 声明一个常量 不能重复声明,不能重复定义*/
原文地址:https://www.cnblogs.com/zhangyongxi/p/9593966.html