变量名和函数名声明提升

老大了看了一点博客,给前端的同志们出了个题:

/****************************************/

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

 

posted @ 2017-09-19 10:44  -xgaox-  阅读(200)  评论(0编辑  收藏  举报