js 变量名和函数名重名

https://blog.csdn.net/czh500/article/details/100024010

<script type="text/javascript">
console.log(a)
var a = 123;
console.log(a)

function a() {
    console.log(a)
}
a();
</script>

我大致上认为js是先编译再运行的,规则是

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

以上代码会等价于

<script type="text/javascript">
var a = function() {
    console.log(a)
}
console.log(a)
a = 123;
console.log(a)
a();
</script>

此处评论已关闭