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 (块级作用域)