Roninwz的博客

一个菜鸟的成长之路

JS中变量名和函数名重名

今天骚凯问了一道变量名冲突的题目,感觉很有意思,顺便也复习一下预解析的一些知识,有不对的地方忘前辈大神指正,题目是这样的:

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

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

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

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

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

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

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


转载来自:https://www.cnblogs.com/bugda/p/6036282.html

阅读更多

扫码向博主提问

去开通我的Chat快问

qq_35038153

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • java
  • php
  • c
个人分类: 前端 Javascript
上一篇css之去除html标签默认的外边距margin和内边距padding,通用工具类 base.css
下一篇win7开启wifi共享(热点)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭