之前碰到这个题目,打印出来是2017
这里包含两个知识点:
1 ECMAScript 中没有函数重载的概念;声明了两个同名的函数,后面的覆盖了前面的函数,变个样子就明白了:
所以变量foo就相当于被重新定义啦;
2 函数声明和函数表达式
上面左边就是函数声明, 右边是函数表达式
二者之间的区别:以上面的例子看
左边函数声明,打印出来是2017,右边函数表达式,打印结果是31;为什么呢?原因就是解析器在向执行环境中加载数据时,会率先读取函数声明,并使其在执行任何代码之前都可用,而对于函数表达式,必须等到解析器执行到他所在的代码行,才会真正被解析执行。
这就是函数声明提升