函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体,起个名字(函数名)。数组
正如函数的概念, 咱们能够根据代码须要, 将特定的功能用函数来包裹浏览器
函数能够分为:内置函数 和 自定义函数安全
内置函数:dom
是官方提供好的函数,能够直接使用 如: alert(), isNaN(), console.log() parseInt()等
语法格式:函数
function 函数名() { 代码块; }
注意:code
例如:定义一个函数 ShowTips对象
function ShowTips(x,y){ alert('我要飞得更高'); }
函数的调用方式: 函数名()递归
function ShowTips(x,y){ alert('我要飞得更高'); } ShowTips();
注意:
1.调用函数后会执行函数内部的代码块;
2.函数在不调用的状况下是不会执行的, 只有调用后函数中的代码才会执行事件
语法格式:ip
function 函数名(参数1,参数2,……) { 执行语句; return 返回值; }
注意:
案例:定义一个函数Add求两个数相加之和
function Add(x,y){ var sum=x+y; return sum; } var result=Add(2,3); //函数调用 alert(result);
注意:
1.函数体语句执行到return时,函数就终止代码执行(return后的代码不会执行)
2.若是return后有返回值,则把这个值返回到函数调用执行的地方
形参:
形参就是在函数定义时,函数名后面的参数; 函数的形参跟变量是同样使用,且不能用var修饰
实参:
实参就是调用时,函数名后面的参数
如: 以前定义的函数Add中: x和y是形参, 2和3是实参
function Add(x,y){ var sum=x+y; return sum; } var result=Add(2,3); //函数调用 alert(result);
注意:
1.在传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。
2.所以在函数调用过程当中,当形参值发生改变,而实参中的值不会变化。
arguments
arguments:函数内部隐藏的数组对象,保存着实参的信息,能够直接使用
函数在传递参数时就是用这个数组arguments来保存的
arguments.length:保存着实参的数量
做用域: 就是起做用的范围。或者说有效范围; 这里涉及到另外两个概念。
定义在函数内部的变量,这个变量只能在函数内部使用,即做用域范围只是函数内部,另外,形参也是局部变量.
ps:函数内的变量使用遵循:就近原则
全局变量就是定义在函数外部的变量,这个变量在任何函数中都有效,即做用域范围是当前文件的任何地方.
JavaScript默认有一个全局对象window,全局做用域的变量实际上被绑定到window的一个属性:
注意: 在定义变量时, 若是不写关键字var也是合法的, 且是全局变量, 可是这样写不安全,容易在其余地方被更改, 因此咱们在函数中写变量要加上var
语句:
var str1='abc'; var sum=str1+str2; var str2='hello'; console.log(sum); //abcundefined
//JavaScript引擎自动提高了变量str2的声明,但不会提高变量str2的赋值
函数的嵌套: 函数内部能够再包含其余函数;
函数之间容许相互调用(不能同时调用),也容许向外调用,
若是互相同时调用:就会出现死循环
对象函数的定义
var 对象={ 属性名:属性值, 属性方法名:匿名函数 } 调用: 对象.属性方法名()
事件驱动:
由于函数不会主动执行, 只有当调用的时候才会执行函数中的代码, 在前面的dom操做示例中,咱们点击了按钮才触发函数调用 全部的函数,没有调用不会执行,那么在咱们浏览器中函数调用的源头在何处,就是事件, 只有使用事件去驱动, 函数才被调用; 如: onclick: 点击事件
示例: 点击搜索按钮调用函数打印出文本框内容, 再清空文本框的内容
递归调用:
函数能够本身调用本身, 成为函数的递归调用;
function fact(num){ var sum; if (num<=1){ sum=1; }else{ sum=num*fact(num-1); } return sum; } alert(fact(6));