console.log(a) // 函数
var a = 1;
console.log(a) //变量 1
function a() {
}
console.log(a) //变量 1
函数提升优先与变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖 .比如对上面代码进行改进
console.log(a) // 函数
var a ;
console.log(a) // 函数
function a() {
}
console.log(a) // 函数
下面的一个例子
function b(){
a = 10;
return;
function a(){ //函数声明置顶
console.log(a);
}
}
var a;
a = 1;
b();
console.log(a); // 输入1
我想大家都明白,在执行函数b的时候,由于其内部有一句a=10,前面并没有var,所以在执行完函数b之后,认为变量a提升为全局变量,并且10这个值覆盖了之前的1。所以打印出的值为10。但其实并不是这样,输出的反而是1,应为在函数b中有个a函数
当不给变量a赋值的时候,反而输出的都是函数而不是undefined
function b(){
a = 10;
return;
}
b();
console.log(a); // 10
在执行函数b的时候,发现有一个隐式声明a=10,它在函数b里的作用域中查找不到有关于名为a的地址,于是向外查找,发现全局作用域下也没有,那么变量提升,系统默认给变量a提供一个内存,并将值赋值给变量a,所以变量a变量提升为全局变量了。所以打印出的值为10