在javascript中,函数声明和函数表达式是有区别的。
所谓的函数声明是指如下形式:
function sum(obj){
return obj.x+obj.y;
}
所谓的函数表达式是指如下形式:
var sum=function(obj){
return obj.x+obj.y;
};
然后这两者的区别在哪里呢,原来在js中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行,如下面例子:
<script>
alert(sum({x:10,y:10}));
function sum(obj){
return obj.x+obj.y;
}
</script>
以上代码可以正常运行,因为代码在开始执行前,解析器就已经读取函数声明并将其添加到执行环境中了。如果把上面函数声明改成函数表达式的形式,就会在执行期间报错:
<script>
alert(sum({x:10,y:10}));
var sum=function(obj){
return obj.x+obj.y;
};
</script>
报错的原因就是在执行alert(sum({x:10,y:10}));时函数表达式sum还没有添加到执行环境中,所以我们在撰写js程序时要养成一个比较好的习惯.
所谓的函数声明是指如下形式:
function sum(obj){
return obj.x+obj.y;
}
所谓的函数表达式是指如下形式:
var sum=function(obj){
return obj.x+obj.y;
};
然后这两者的区别在哪里呢,原来在js中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行,如下面例子:
<script>
alert(sum({x:10,y:10}));
function sum(obj){
return obj.x+obj.y;
}
</script>
以上代码可以正常运行,因为代码在开始执行前,解析器就已经读取函数声明并将其添加到执行环境中了。如果把上面函数声明改成函数表达式的形式,就会在执行期间报错:
<script>
alert(sum({x:10,y:10}));
var sum=function(obj){
return obj.x+obj.y;
};
</script>
报错的原因就是在执行alert(sum({x:10,y:10}));时函数表达式sum还没有添加到执行环境中,所以我们在撰写js程序时要养成一个比较好的习惯.