首页 > 代码库 > JS高程3.基本概念(6)函数
JS高程3.基本概念(6)函数
1.ECMAScript中的函数使用function关键字来声明。
eg:
1 function sum (num1,num2){ 2 alert(num1+num2); 3 } 4 sum(3,7);
注意:
在有return语句的函数中,函数会在执行完return语句后停止并立即退出。因此,位于return语句之后的任何代码都永远不会执行。
eg:
1 function sum (num1,num2){ 2 return num1+num2; 3 alert("Hello!");//永远不会执行。 4 } 5 alert(sum(3,7));
以上代码执行后,会出现内容为“10”的警告框,但是不会出现内容为“Hello!”的警告框,因为函数内部执行完return语句后就停止结束了,不会执行后面的alert(“Hello!”);语句。
2.严格模式下对函数的一些限制
(1)不能把函数命名为evel或是arguments;
(2)不能把参数命名为evel或是arguments;
(3)不能出现两个命名参数同名的情况。
3.理解参数
(1)ECMAScript中的参数在内部是用一个数组来表示的,函数接收到的始终是这个数组,ECMAScript函数不介意传递进来的参数个数以及参数的数据类型,从这一点可以看出,ECMAScript函数不能实现传统意义上的重载。
重载函数的定义:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。
(2)函数体内可以通过arguments对象访问到参数数组,从而获得传递给函数的每一个参数。
1 function sum (){ 2 return arguments[0]+arguments[1]; 3 } 4 alert(sum(3,6));
以上例子说明:
ECMAScript函数命名的参数只提供便利,但不是必需的。
(3)arguments对象的length属性可以获知有多少个参数传递给了函数。
eg:
1 function howManyArgw(){ 2 alert(arguments.length); 3 } 4 howManyArgw("hello",45); //2 5 howManyArgw(); //0 6 howManyArgw(12); //1
出现三个提示框,依次是:
(4)开发人员可以利用这一点让函数接收任意个参数并分别实现适当的功能。
eg:
1 function doAdd(){ 2 if(arguments.length==1){ 3 alert(arguments[0]+10); 4 }else if(arguments.length==2){ 5 alert(arguments[0]+arguments[1]); 6 } 7 } 8 doAdd(20); 9 doAdd(21,10);
(5)arguments对象可以与命名参数一起使用:
eg:
1 function doAdd( num1,num2){ 2 if(arguments.length==1){ 3 alert(num1+10); 4 }else if(arguments.length==2){ 5 alert(arguments[0]+num2); 6 } 7 } 8 doAdd(20); 9 doAdd(21,10);
(6)arguments的值永远与对应命名参数的值保持同步。
eg:
1 function add(num1,num2){ 2 arguments[1]=10; //每次执行add函数都会重写第二个参数,将第二个参数的值改为10. 3 alert(arguments[0]+num2); 4 } 5 add(1,2);//本来的值是1+2=3,因为第二个参数的值被改变1+10=11.
注意:
(1)这并不是说着两个值会访问相同的内存空间,它们的内存空间是独立的,但是它们的值会同步。
(2)没有传递值的命名参数将会自动被赋予undefined值。
eg:
1 function add(num1,num2){ 2 arguments[1]=10; 3 alert(arguments[0]+num2); 4 } 5 alert(typeof(num2)); 6 add(1);
依次出现的提示框:
(3)ECMAScript中的所有参数传递都是值,不可能通过引用传递参数。
JS高程3.基本概念(6)函数