var
var 作用域
var 分为全局作用域和局部(函数)作用域,下面这个例子,变量 a 是全局作用域,变量aa 是局部作用域,全局作用域的变量可以再函数里面使用,函数里面的变量,不能在全局中使用,要使用的话可以写return返回某个变量,在函数调用时写一个变量接收函数返回的变量即可。在函数里面声明变量时,省略 var 时,例如 bb ,声明的变量默认为全局变量。
var a = 10;
console.log(a); // 10
function aBa(){ // 函数
var aa = 20;
bb = 30;
// 代码
console.log(a); // 10
console.log(aa);
}
aBa(); // 调用函数 输出 aa 20
console.log(aa); // 报错
console.log(bb); // 30
var 变量提升
js 中的变量理应是先声明,在赋值,在使用,但是可能会出现忘了声明,直接赋值的情形,所以就出现了变量提升。变量只声明,未赋值时使用出现 undefined 错误。
console.log(a); // undefined
var a = 10;
console.log(a); // 10
// 相当于
var a;
console.log(a);
a = 10;
console.log(a);
变量提升机制
console.log(a); // f a() {console.log(10)}
console.log(a()); // undefined
var a = 3;
function a() {
console.log(10) //10
}
console.log(a) //3
a = 6;
console.log(a()); //a is not a function;
// 相当于
var a = funtion () {
console.log(10)
}
var a;
console.log(a); // f a() {console.log(10)}
console.log(a()); // undefined
a = 3;
console.log(a) //3
a = 6;
console.log(a()); //a() is not a function;
函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。