JS中变量名和函数名重名

如下面的示例,当变量名字和函数名字相同的时候:

var a=100;
function a(){
  console.log(a);
}
a();      // a is not a function

这个串代码执行完会报错 : a is not a function

问题来了,为什么会报这个错误呢? 这里涉及到函数和变量的预解析:

  1. 函数声明会置顶;
  2. 变量声明也会置顶
  3. 函数声明比变量声明更置顶:(函数在变量上面)
  4. 变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置
  5. 声明过的变量不会重复声明

知道以上的规则,上面的代码等同于 :

var a=function (){
  console.log(a);
}
var a=100;
a();

相当于给a重新赋值了,所以会报错

source:https://www.cnblogs.com/bugda/p/6036282.html

你可能感兴趣的:(JavaScript)