在JavaScript中,函数没有重载函数。
函数为什么先调用,后声明也可以?
下面来看一个小面试题:
<!DOCTYPE html>
<html lang="en">
<head>
<meta chars et="UTF-8">
<title>测试</title>
<!--<style type="text/css">-->
<!--</style>-->
<script type="text/javascript">
var sum = 10;
fun();
function fun(){
var sum = 20;
console.log(sum);
}
</script>
</head>
<body>
</body>
</html>
明明在前面已经声明了全局变量num,为什么会是undefined呢?
原因是在javascript代码在浏览器中是要先经过预解析的。在预解析中,首先要将var和function代码提前。
当执行到function的局部作用域中,也要进行预解析。
因此代码也就变成了
var num;
function fun(){
var num;
console.log(num);
var sum = 20;
}
num = 10;
fun();
变成了上面的代码后,再从上到下一步步的执行,可以见得在控制台中输出的就是undefined.
上述内容可以理解为:
①变量提升:
定义变量的时候,变量的声明会被提升到作用域的最上面,但是变量的赋值不会提升。
②函数提升:
定义函数的时候,函数的声明会被提到整个作用域的最上面。