javascript函数的区别于其他语言的地方之一就是javascript函数不能重载。原因在于javascript的函数是一个对象。
在javascript中定义一个函数有三种方式
1 函数声明
function sum(arg1,arg2) {
return arg1+ arg2;
}
2 函数表达式
var sum = function(arg1,arg2) {
return arg1 + arg2;
}
3. Function构造函数
var sum = new Function('arg1','arg2','return arg1+arg2')
一般来说不推荐第3种方法,原因是会导致两次解析,一次是解析常规ECMAScript代码,一次是解析传入构造函数的字符串(详见Javascript高级编程)。
javascript中没有函数重载,是因为函数名其实相当于指针。
function addSum(arg1,arg2){
return arg1 + arg2;
}
funtion addSum(arg1,arg2){
return arg1 + arg2 + arg2;
}
在这个例子中,后面的addSum会覆盖前面的addSum函数,相当于这样:
var addSum = function(arg1,arg2) {
return arg1 + arg2;
}
addSum = function(arg1,arg2) {
return arg1 + arg2 + arg2;
}
函数声明和函数表达式的区别在于,当解析器向执行环境加载数据时,解析器会率先读取函数声明,并使其在执行任何代码前可用。但对于函数表达式,则必须等到解析器执行到它所在的代码行时,才会被解释执行。分析下面的例子,想想代码会怎么输出。
'use strict';
console.log(addSum(1,1));
function addSum(arg1,arg2){
return arg1 + arg2;
}
var addSum = function(arg1,arg2) {
return arg1 - arg2;
}
console.log(addSum(1,1));
第一个console其实调用的是函数声明的addSum,因为函数声明会在任何代码执行前可用。
第二个console其实调用的事函数表达式的addSum,因为函数表达addSum被解析后,会覆盖前面的同名addSum函数。
因此,程序先输出2,然后输出0.
如果把函数声明的addSum注释掉,会发生什么呢? 你试试看