变量名和函数名声明提升
老大了看了一点博客,给前端的同志们出了个题:
/****************************************/
alert(a);
a();
var a=1;
function a(){
alert(2);
}
alert(a);
a=3;
a();
/****************************************/
根据声明提前的原则,代码解析时是这个样子的,(函数名和变量名相同的时候互相覆盖,后者干掉前者)
/****************************************/
var a;
function a(){alert(2)} //此时a是个函数
alert(a); //弹出函数a本体
a(); //执行函数a 2
a=1; //此时a是一个变量
alert(a); // 1
a=3; //此时a是一个变量
a(); //error 不是一个函数
/****************************************/
var b= 'global';
function f(){
console.log(b);
var b= 'local';
console.log(b);
}
有作用域的影响(函数内使用变量,优先使用函数体内存在的,函数体内不存在,才会跳出本作用域寻找),也有变量提升的影响
解析:
var b= 'global';
function f(){
var b;
console.log(b);
b= 'local';
console.log(b);
}
f();
结果就是:undefined local