因为最先接触java,所以总是习惯性的把js和java比较。与java中完全不同的第一点就是:
js中函数是一个对象。每个都是Function 类型的一个实例。
function test(){
};
alert(test instanceof Function )//true
函数的声明一般有两种方式:
1 函数声明
function test(){
};
2函数表达式
var test =function(){
}
通常来说这两种是基本一致的,但有一点需要注意:解析器在解析的时候,会优先读取函数声明,并使其在执行任何代码之前可以访问,至于函数表达式则必须等到执行到所在行的时候也会被解释执行。
比如说这段代码就完全没有问题:
test();
function test(){
alert('success')
};
而这段则直接报错:uncaught typeerror: test is not a function
test();
var test =function(){
alert('success');
}
这也是我们在写代码时候需要注意的一个地方。
js的函数没有重载的概念
如果有两个相同名字的函数,哪怕是参数并不相同,后者还是会覆盖前者。
function doSomething(order){
alert('the order is :'+order);
};
function doSomething(order,somebody){
alert(somebody+ ' do the order: '+order);
}
doSomething('eat ','you');// you do the order: eat
doSomething('drink');//undefined do the order: drink
实际的执行结果就是后面的函数完全覆盖了之前的函数。
js的函数参数内部是用数组实现的
js 函数不介意传递的参数个数,也不在乎传递的参数类型。参数内部是用一个数组表示的。
函数体内可以通过arguments对象来访问这个参数数组,从而获取每一个参数。
function test(){
alert(arguments[0])
}
test(1,2,3,4,5);
这样的代码也是完全可行的,虽然函数声明的时候没有声明参数,但是完全可以通过arguments访问调用时候传递了哪些参数,甚至可以通过传递的参数来变相的实现重载,也就是通过length来判断传递几个。
arguments对象可以与命名参数一起使用。