js基础--javascript基础概念之函数
引用w3c介绍:
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
JavaScript 函数语法
函数就是包裹在花括号中的代码块,前面使用了关键词 function:
function functionname()
{
这里是要执行的代码
}
当调用该函数时,会执行函数内的代码。
可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。
提示:JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。
=========
函数
函数对任何语言都是一个核心的概念。因为可以通过函数封装多行语句。然后再不同的地方调用执行它,简化了代码量。提高了可读性。
在ECMAScript 中 使用function 关键字来声明函数。后跟一组参数以及函数体。函数的基本语法如下:
function functionName(arg1,arg2,arg3……argN){ //执行语句 }
示例:
function sayHi(Message,Name){ alert('hi '+Name+' '+Message); } sayHi('welcome','kin');
上面定义了一个名为sayHi的 函数,函数有两个参数。Message Name 函数的功能是弹出欢迎的警告框。
下面调用函数时向函数传入了两个值。值赋给了函数。函数执行。
另外函数还可以有返回值。函数可以通过return 语句后跟要返回的值,如:
function welcome(Name){ return 'hi '+Name+' Welcome'; } var say = welcome('kin'); alert(say);
函数中使用return 语句将值返回。函数中只有return 关键字可以实现返回值。使用了return 语句后的代码不会执行。如:
return 'hi '+Name+' Welcome';
alert('在return后面的语句将不会执行');//永远不会执行。因为return已经强制退出函数了。
难道一个函数中只能存在一个return语句? 当然不是 只有当函数内的return语句被执行才会终止函数。这样你就可以像下面那样 一个函数中包含多个return函数了;
function Contrast(v1,v2){ if(v1 > v2){ return v1; }else{ return v2; } }//因为条件只会满足一个return语句。 var Max = Contrast(15,20); alert(Max);
关于函数返回值。一个函数中要么始终有一个返回值。要么始终都没有返回值。否则,会给调试函数带来很多的不便。
另外函数可以不带返回值。做到终止程序的目的
function Contrast(v1,v2){ if(v1 > v2){ return;//return不带任何返回值来做到终止函数运行的目的 }else{ return v2; } }
函数命名和变量命名几乎一样。函数名中不能使用eval 或arguments 参数名中亦是如此。
函数参数
ECMAScript 中的参数与其他语言有微微不同。ECMAScript 不会介意你传递进入多少函数。不会介意传入的类型。因为函数接受到始终是一个数组而已,它才不管你那么多呢!函数接受到的参数使用一个数组来保存。因此,在函数体内想访问这些参数,还有一个方法,访问这个保存参数的数组。
保存这个数组的是一个叫arguments 的对象。
它很类似于数组。但是确实是一个object实例,不是array实例。但是你依然可以使用[]来访问对象里面的每个元素。如:
function Contrast(v1,v2){ alert(arguments[0]);//12 alert(arguments[1]);//22 alert(arguments[2]);//undefined 没有传递值的元素默认是undefined } Contrast(12,22);
还可以使用length来准确的查看传入了多少个参数。
alert(arguments.length);
因此EMCAScript可以不显式的使用参数如:
function fun(){ var v = 0; for(var i = 0;i<arguments.length;i++){ v = v + arguments[i]; } return v; } alert(fun(10,20,30,40));//100
这是EMCAScript 的一大特点。命名的参数只是提供便利。但不是必需的。
没有重载
EMCAScript 不能像传统意义上那样实现重载。因此,如果在javascript中定义了两个名字一样的函数,则改名字只属于后者。如。
function Sum(v1,v2){ return v1 + v2; } function Sum(s1,s2){ return s1 - s2; } alert(Sum(20,10));//10 调用了后面一个Sum函数。
参数亦是如此:
function Sum(v1,v1){ return v1 + v1; } alert(Sum(20,40));//80
传进来的两个v1 后者会被函数中使用;
但是你通过arguments 这个对象来访问则使用的是两个参数。因为传入的参数数组中写入的就是两个参数值。
function Sum(v1,v1){ return arguments[0] + arguments[1]; } alert(Sum(20,40));//60