JavaScript中的函数
1)JavaScript中函数没有重载,如果定义了两个名字相同的函数,那么最后定义的函数会覆盖掉前面定义的函数。
2)JavaScript中定义函数时是否设置参数以及参数怎样设置,都不会影响调用该函数时参数的传递。
例如:定义的函数有两个参数或者没有参数,在调用这个函数的时候,可以不传参数,也可以传入一个、两个、三个或多个参数。
3)JavaScript中函数的参数是用一个名字为arguments的数组来表示的,函数接收到的始终都是这个数组,而并不关心数组中包含哪些参数。
说明:
在函数体内,可以通过arguments对象来访问这个参数数组。
arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的,可以通过arguments.length来获取传入参数的个数。
4)定义函数的三种方式:
[1]使用函数声明语法定义
function sum (num1, num2) {
return num1 + num2;
}
[2]使用函数表达式定义
var sum = function(num1, num2){
return num1 + num2;
}
[3]使用函数构造方法(不常用)
var sum=new Function("参数1","参数2","函数体");
注;如果只传一个字符串,则这个字符串就是函数体
第一种和第二种的区别:
1)解析器在向执行环境中加载数据时,对函数声明和函数表达式并不是一视同仁。
2)解析器会率先读取函数声明,并使其在执行任何代码之前就可以访问;
3)而函数表达式必须等到解析器执行到它所在的代码行时,才会被解释执行。
例子:
alert(sum(10,10)); // 正常运行
function sum(num1, num2) {
return num1 + num2;
}
分析:在代码开始执行之前,解析器就已经通过函数声明的提升,读取并将函数声明添加到执行环境中。
对代码求值时,JavaScript引擎在第一次会声明函数并将它们放到源代码树的顶部
所以,即使声明函数的代码在调用它的代码之后,JavaScript引擎也能把函数声明提升到顶部。
alert(sum(10,10)); // 运行报意外标示符错:"unexpected identifier"
var sum = function(num1, num2) {
return num1 + num2;
}
分析:因为函数位于一个初始化语句中,而不是以函数声明的方式定义。
5)函数是对象!每个函数都是Function类型的对象,并且与其他引用类型的对象一样,具有属性和方法!
注意:
// 定义函数 // 定义并立即执行函数
var abc = function(){ var abc = function(){
// do something // do something
}; }();
6)JavaScript中几种特殊的函数:
1>回调函数:
将一个函数作为参数传递给另一个函数,而作为参数的函数,就叫做回调函数。
2>返回值为匿名函数的函数:
function fn(){
var a = "a";
return function(){
return a;
}
}
说明:
1)函数fn()的返回值为一个函数。 eg:alert(fn()); // function(){return a;}
2)这是内部函数的一个特例。
3>一次性函数(自调函数):
(
function(param1, param2){
// ...
}
)(value1, value2);
说明:
1)第一个小括号:封装函数;第二个小括号:调用函数。
2)常用来完成页面初始化的工作。