javascript的函数声明和函数表达式
由于以前学的是java和C++对于这2种语言的认知是:函数只有先声明才能去调用,但是js里面这个顺序有所不同。
<script type="text/javascript">
//这是声明在前,调用在后
//1、下面是 【函数表达式】,只能声明在前,调用在后
//如果在这里直接去调用sum浏览器会抛出一个 Uncaught TypeError: sum is not a function的异常
var sum = function(n1,n2) {
return (n1+n2);
}
alert(sum(10,12)); //22
//2、下面是【函数声明】,既可以声明在前,函数调用在后;也可以调用在前,声明在后
document.write("调用在前,声明在后:"+sum2(1,2)+"<br/>");
function sum2 (a,b) {
return (a+b);
}
document.write("调用在后,声明在前:"+sum2(10,2)+"<br/>");
</script>
结果如右图:
现在来说明原因:
实际上,解析器在向执行环境加载数据时,对函数声明和函数表达式并非一视同仁。
解析器会率先读取到函数声明,并使其在执行任何代码之前可以访问;而函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。