JavaScript理解笔记—变量提升 全局作用域 名字空间

JavaScript理解笔记—变量提升 全局作用域  名字空间
JavaScript会扫描整个函数体,把所有申明的变量提升到函数顶部。
注:var x=‘Tom’ 只提升声明,不提升赋值。
例如:console.log(x);var x=‘Tom’; 
运行不会报错,输出为:undefined
上述语句等效为:var x;console.log(x);x=‘Tom’;
所以在函数内定义变量时,要首先声明所有变量。


在函数外定义的变量为全局作用域,JavaScript默认有一个对象:window
全局作用域的变量实际上是被绑定到window的一个属性上。
例如:var course=‘99’;
直接访问course和访问window.course是一样的。


全局变量会绑定在window上,不同的JavaScript文件若使用相同全局变量或定义了相同名字的顶层函数,会造成命名冲突。
解决冲突方法:把所变量和函数全部绑定到一个全局变量里。
如:var MYAPP={}; //唯一全局变量
MYAPP.name=‘Tom’;    //其他变量
MYAPP.foo= function(){return ‘foo’ ;};


块级作用域   let(代替var声明块级作用域)
如: for(let i=0;i<10;i++){ 
i=100;}
则不能在for循环体之外使用变量i。

常量 const  (块级作用域)